组合数据行R

时间:2012-09-10 16:55:54

标签: r

我有一个数据框,我想要组合数据框行。我的数据框看起来像这样。

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))

应构建数据框和最终数据框

1 个答案:

答案 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))

如果是这样,您对复制做了什么? summean

  • 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

data.table方法:

library(data.table)
DT <- data.table(data)
DT[ , lapply(.SD, median, na.rm = T), by= colID, .SDcols = paste0('col',1:4)]