0

R の 10 個のテスト用に 10 個のデータフレームがあり、そのすべてに文字列として 1 つの ID 変数と 3 つの変数が含まれ、t1すべての測定時間が含まれています。t2t3

すべての ID がすべてのデータフレームにあるわけではありません。

10 個のデータフレームから 3 個のデータフレームを作成したい

  • すべてのデータフレームからの t1 変数を持つ 1 つ目、t2 変数を持つ 2 つ目、t3 変数を持つ 3 つ目
  • ID変数で並べ替え
  • 1 つのデータフレームに 1 つの ID 変数の値が含まれていない NA の場合。

欠落があるため (すべての参加者がすべてのテストに参加したわけではありません)、したがって、 または を使用することはできませmerge()ん。また、10 個のデータフレームすべてにどの ID 変数の値があるのか​​もわかりません。私は少し困惑しています - >アイデアをありがとう!!cbind()sqldf()

4

1 に答える 1

0

この再現可能な例を使用します。

set.seed(42)
d <- replicate(n=10, list(data.frame(ID=rbinom(5,20,0.5), t1=runif(5), t2=runif(5), t3=runif(5))))

これはデータフレームのリストであることに注意してください。テーブルが分離されている場合は、 のようなものを使用してこれを再現できますd <- list(dataframe1, dataframe2, ...)

最初に、混乱を避けるために変数t1,t2t1.i,に名前変更しますt2.i。ここiで、 はデータフレームのインデックスです。

for(i in seq(d)) names(d[[i]])[-1] <- paste(names(d[[i]])[-1], i, sep=".")

これをすべてマージします。

big <- Reduce(function(x,y)merge(x,y,all=TRUE), d)

これは、31 列 (IDおよびデータフレームごとに 3つ) を持つ 1 つの大きなテーブルであり、存在しない値tで埋められ、 (デフォルトの) で並べ替えられています。NAIDmerge

これをサブセット化して、必要なものを取得できます。

t1 <- big[,c(1,grep("1", names(big)))]
t2 <- big[,c(1,grep("2", names(big)))]
t3 <- big[,c(1,grep("3", names(big)))]
于 2013-08-29T14:15:46.537 に答える