0

私の質問のほとんどは、データを抽出して整理する方法だけであり、事前のトレーニングがなくても、自分が欲しいものを明確に表現できなかったことをお詫びします。教科書やオンラインで調べるための言い回しの仕方さえ知っていたらいいのにと思います。これが私の質問です:

IDと呼ばれる一意のグループIDを持つ情報のデータフレームがあります。153個の一意のIDがありますが、これらのグループからの情報の行は6,000を超えています。

私がやりたいのは、一度に2つのグループからすべての情報を取得し、関連するすべての情報を含む単純なcsvファイルを書き出すことです。全体的な個人の数が奇数の場合(n = 153)、それはどのように機能しますか。

私はこのようなことを考えました:

IDs = unique(dat$ID)
for (i in length(IDs)){
    IDgp = subset(dat, dat$ID==IDs[i] & dat$ID==IDs[i+1])
    write.csv(IDgp, paste(IDgp[i],".csv")
    i = i+2
    }

これは機能せず、次の「2つのグループ」に増やす方法がわかりません。forループが不格好で、おそらくddplyが機能するか、サブセットではなくwhichコマンドでさえ機能するのではないかと思っていました。RIで物事を行う方法はたくさんあるので、私がやりたいことを何と呼ぶべきかさえわかりません。私はそれをはるかに複雑にしていると思います。

私は答えを探していて、可能性としてこれに出くわしましたが、一度に複数のグループの情報を書き込む方法がわかりません。また、function(x)コマンドが何をしているのかわかりません。

d_ply(dat, "ID", function(x)
     write.csv(x[i], file = paste(x$ID[i], ".csv")
     , row.names = FALSE))
4

2 に答える 2

1

多分これは助けることができます。しかし、これを行うにはもっとエレガントな方法があると思います。

IDs = unique(dat$ID)
for (i in seq(1, length(IDs), 2)){
  write.csv(dat[dat$ID %in% IDs[i+c(0,1)], ], 
    paste(IDs[i], "_", IDs[i+1], ".csv", sep=""))
}

IDの全長のシーケンスを作成するために編集

于 2012-04-23T19:29:46.193 に答える
1

IDから適切なディメンションのマトリックスを作成し、それらをループする1つのアプローチを次に示します。

dat <- data.frame(id = 1:10, foo = runif(10))
#This will throw a warning if dimensions don't line up, not sure what you want to do with those
idpairs <- matrix(sort(unique(dat$id)), ncol = 2, byrow = TRUE)
> head(idpairs,2)
     [,1] [,2]
[1,]    1    2
[2,]    3    4
a_ply(idpairs, 1, function(x) print(dat[dat$id  %in% x,]))

明らかに、print上記の関数を目的に適したものに置き換えます。

于 2012-04-23T19:41:52.477 に答える