我有一个数据框,我想要组合数据框行。我的数据框看起来像这样。
col id, col1, col2, col3, col4
1, 1, , , 5
1, , 1, , 5
1, , , 1, 5
我希望最终结果看起来像
col id, col1, col2, col3, col4
1,1,1,1,5
有什么想法吗?我试过聚合,不能让它正常工作。
编辑:
data<- data.frame(colID=c(1,1,1,2,2), col1=c(1,NA,NA,NA,2), col2=c(NA,1,NA,2,NA), col3=c(NA,NA,1,NA,NA), col4=c(5,5,5,7,7))
finaldata=data.frame(colID=c(1,2), col1=c(1,2), col2=c(1,2), col3=c(1, NA), col4=c(5,7))
应构建数据框和最终数据框
答案 0 :(得分:4)
您可以通过多种方式执行此操作。但首先你需要向自己澄清一些事情。
data.frame(colID=c(1,1,1,2,2), col1=c(1,1,NA,NA,2), col2=c(NA,1,NA,2,NA), col3=c(NA,NA,1,NA,NA), col4=c(5,5,5,7,7))
如果是这样,您对复制做了什么? sum
? mean
?
col4
中的群组是否始终与colID
中的群组一致?或col4
只是另一个数据列?包plyr
为这种事情提供了一种令人愉快的语法。我将median
用于聚合函数。
library(plyr)
ddply(data,
.(colID),
summarise,
col1=median(col1, na.rm=TRUE),
col2=median(col2, na.rm=TRUE),
col3=median(col3, na.rm=TRUE),
col4=median(col4, na.rm=TRUE))
然而,还有许多其他可能性。 data.table
包很好,特别是对于大型数据集。您也可以使用基本R函数aggregate
执行此操作。
data.table
方法:
library(data.table)
DT <- data.table(data)
DT[ , lapply(.SD, median, na.rm = T), by= colID, .SDcols = paste0('col',1:4)]