バックグラウンド
これで、次のような形のデータフレームができました。
example = structure(list(sid = c(39, 40, 41, 42, 42, 43, 43, 44, 45, 45,
46, 46, 47, 48, 49, 49, 50, 51, 52, 52, 53), monthday = c("42",
"44", "46", "410", "428", "423", "49", "411", "416", "430", "418",
"426", "419", "420", "420", "53", "421", "424", "425", "53",
"511")), .Names = c("sid", "monthday"), row.names = c(301L, 300L,
298L, 296L, 282L, 288L, 297L, 295L, 294L, 281L, 293L, 285L, 292L,
291L, 290L, 278L, 289L, 287L, 286L, 279L, 270L), class = "data.frame")
言い換えれば、それは背が高いです:
sid monthday
39 42
40 44
41 46
42 410
42 428
43 423
43 49
最終的に、私はそれを広いフォーマットにしたいと思います:
sid monthday1 monthday2
39 42 NA
40 44 NA
41 46 NA
42 410 428
43 423 49
等
私はreshapeとreshape2パッケージ、そして次のような集約を使って物事を試してきました:
library(reshape2)
temp = melt(example,id.vars=c("sid"))
data.wide <- dcast(temp, sid ~ variable, value.var="value")
しかし、私の脳をその周りに巻き付けることはできません。各シドの発生を特定できれば、問題を解決できると思います。
差し迫った問題
したがって、上記のトールデータのsid列を取得するには、各sidの出現率を示す新しい変数を作成します。
sid occur
39 1
40 1
41 1
42 1
42 2
43 1
43 2
変数は、occur
sid値39、40、および41が1回だけ表示され、42と43には1番目と2番目のインスタンスがあることを示しています。インスタンスが2つしかない場合は、duplicate()を使用してそれを数値に変換できますが、任意の数のインスタンスに一般化できるソリューションは何ですか?