使用colMeans合并R中的数据行吗?

时间:2018-09-01 13:19:15

标签: r rows mean

“如何组合行/列”线程的数量给我留下了深刻的印象,但是这些都不是特别有用,或者至少不适用于我的问题。

我的数据如下:

MyData<-data.frame("id" = c("a","a","b"),
                   "value1_1990" = c(5,NA,1),
                   "value2_1990" = c(5,NA,2),
                   "value1_2000" = c(2,1,1),
                   "value2_2000" = c(2,1,2),
                   "value1_2010" = c(NA,9,1),
                   "value2_2010" = c(NA,9,2))

我要做的是使用基数R的id=="a"MyData[,(2:7)]的两行合并为colMeans的列。

外观如何:

  id value1_1990 value2_1990 value1_2000 value2_2000 value1_2010 value2_2010
1  a           5           5           2           2          NA          NA
2  a          NA          NA           1           1           9           9
3  b           1           2           1           2           1           2

我需要什么

  id value1_1990 value2_1990 value1_2000 value2_2000 value1_2010 value2_2010
1  a           5           5         1.5         1.5           9           9
2  b           1           2           1           2           1           2

我尝试过的方法(除其他外):

MyData[nrow(MyData)+1, 2:7] = colMeans(MyData[which(MyData$id=="a"),(2:7)],na.rm=T) # to combine values from rows where id=="a"
MyData$id<-ifelse(is.na(MyData$id),"NewRow",MyData$id) # to replace "<NA>" in the id-column of the newly created row by "NewRow".

这行得通,除了...

  1. ...它将所有其他现有ID转换为数字值(我不想让第二行代码(ifelse语句)接触任何现有ID,这就是为什么我写了else==MyData$id)。

  2. ...这不是特别的花哨代码。有没有一线代码解决方案可以解决这个问题?我看到了其他使用aggregate()的方法,但这对我不起作用。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用dplyr:

library(dplyr)

可能的解决方案:

MyData %>% group_by(id) %>% summarise_all(funs(mean(., na.rm = TRUE)))