2

変数の縦方向の測定値を含むデータフレームがxありy、さまざまな時点timeで、いくつかの被験者がいidます。ただしxyいくつかの欠落値があります。

私が欲しいのは、データフレームを集約して、IDごとに最初に定義されたxyを取得することです。xそしてy、異なる時点になりますが、それは問題ではありません。

testdf<-data.frame(id=c(rep("A",4),rep("B",4),rep("C",4) ), x=c(NA, NA, 1,2, 3, NA, NA, 1, 2, NA,NA, 5), y=rev(c(NA, NA, 1,2, 3, NA, NA, 1, 2, NA,NA, 5)), time=c(1,2,3,4,0.1,0.5,10,20,3,2,1,0.5))

だからそれtestdfはに減少します

 id x y
1  A 1 5
2  B 3 1
3  C 5 1

更新:xデータフレームに多数の変数を含めることができるソリューション(データフレームに多数の変数がある場合に、y変数を明示的に定義する必要がないソリューションまたは関数)は可能でしょうか??

4

2 に答える 2

4

これが基本的なRアプローチです-@kohskeの答えとほとんど同じ概念ですが、とを使用byしていlapplyます。

data.frameただし、最初に、 「id」と「time」で並べ替える必要があります(これは、@ kohskeの回答にも当てはまります)。

testdf2 <- testdf[order(testdf$id, testdf$time), ]

do.call(rbind, by(testdf2[2:3], 
                  testdf2$id, 
                  FUN = function(aa) 
                    lapply(aa, function(bb) na.omit(bb)[1])))
#   x y
# A 1 5
# B 3 1
# C 5 1

の最初の部分でby、「集約」する列を指定します。

于 2013-01-26T15:50:06.273 に答える
3

これは、あなたの望むことですか?

> library(plyr)
> ddply(testdf, .(id), summarize, x = na.omit(x)[1], y = na.omit(y)[1])
  id x y
1  A 1 5
2  B 3 1
3  C 2 2

更新しました

これが暗黙のバージョンです。

> ddply(subset(testdf, select = id:y), .(id), colwise(function(z) na.omit(z)[1]))
  id x y
1  A 1 5
2  B 3 1
3  C 2 2
于 2013-01-26T14:36:13.773 に答える