0

データフレームの単一行にフォーマットする必要がある一意の ID ごとに複数の行を持つ csv ファイルがあります。このファイルを読み込んだ後、最初のデータフレームになります。

id  week   v1  v2
01  week1  3   2
01  week2  5   2
01  week3  2   3
02  week1  1   2
02  week2  5   5
03  week1  4   1
03  week2  4   3
03  week3  4   2
[etc...]

特定のIDのv1のすべてのインスタンスをプルしたいので、すべての一意のIDを取得します

uniqid<-unique(data$id)

そして、これらを 1:length(uniqid) から繰り返します

temp <- subset(data,data$id==uniqid[i])

毎週のデータを一時変数にプルします

week1 <- temp$v1[temp$week=="week1]

rbindを使用してデータフレームを再構築できます

output <- rbind(output,data.frame(ID=uniqid[i],week1,week2,week3))

私の問題は、たとえばid = 02の場合、week3がないため、rbindが壊れることです。week3 変数が作成されていないようです。NAと表示されません。rbind が失敗しないように、変数が作成されて NA (または 0) に設定されているかどうかをテストするにはどうすればよいですか? または、これを達成するための完全に異なる/より効率的な方法はありますか?

4

2 に答える 2

1

ベース R では、以下を使用できますreshape

> reshape(mydf, direction = "wide", idvar="id", timevar="week")
  id v1.week1 v2.week1 v1.week2 v2.week2 v1.week3 v2.week3
1  1        3        2        5        2        2        3
4  2        1        2        5        5       NA       NA
6  3        4        1        4        3        4        2

出力から「v2」列を削除する場合は、データを再形成する前に削除するか、関数内から削除できます。

> reshape(mydf, direction = "wide", idvar="id", timevar="week", drop="v2")
  id v1.week1 v1.week2 v1.week3
1  1        3        5        2
4  2        1        5       NA
6  3        4        4        4
于 2013-10-22T13:15:58.803 に答える