0

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

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

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

4

1 回答 1

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)]
于 2012-09-10T20:52:51.117 回答