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

これは、さまざまな方法で実行できます。ただし、最初に、いくつかのことを自分自身に明確にする必要があります。

  • グループに与えられた数字は常に1つだけですか? つまり、このようなデータはありますか?

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 に答える