“如何组合行/列”线程的数量给我留下了深刻的印象,但是这些都不是特别有用,或者至少不适用于我的问题。
我的数据如下:
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".
这行得通,除了...
...它将所有其他现有ID转换为数字值(我不想让第二行代码(ifelse语句)接触任何现有ID,这就是为什么我写了else==MyData$id
)。
...这不是特别的花哨代码。有没有一线代码解决方案可以解决这个问题?我看到了其他使用aggregate()
的方法,但这对我不起作用。
答案 0 :(得分:0)
您可以尝试使用dplyr:
library(dplyr)
MyData %>% group_by(id) %>% summarise_all(funs(mean(., na.rm = TRUE)))