我有这样的数据框
test <- data.frame(id = rep(LETTERS[1:2],each = 3),
a = c(1,NA,NA,10,NA,NA),
b = c(2,NA,NA,20,NA,NA),
c = c(NA,3,NA,NA,30,NA),
d = c(NA,NA,4,NA,NA,40))
Run Code Online (Sandbox Code Playgroud)
我得到了这个数据帧,并希望将其转换为每个唯一的'id'只有一行,而数据帧中没有NA.
我这样做
ddply(test,
.variables = 'id',
.fun = function(df){
colSums(df[,1:4], na.rm = T)})
Run Code Online (Sandbox Code Playgroud)
获取此data.frame
id a b c d
1 A 1 2 3 4
2 B 10 20 30 40
Run Code Online (Sandbox Code Playgroud)
它有效,但是有一种更直接的方法可以不使用colSums,压缩行来为每个'id'创建一行,因为在每个'id'中,所有列只有一个值,其余的是NAs .我确实遇到了类似的请求,同时寻找其他东西,但现在找不到它!
谢谢
使用R基函数
> test[is.na(test)] <-0
> aggregate(.~id, data=test, FUN="sum")
id a b c d
1 A 1 2 3 4
2 B 10 20 30 40
Run Code Online (Sandbox Code Playgroud)