要約の形で提供されるデータを変換する必要があります。最初にロングフォーマットに、次にワイドフォーマットに。
IDごとに、IDがアクティビティを実行した回数があります。データは順序付けられています。
たとえば、id 1 の場合、彼は最初に「a」を 3 回実行し、次に「c」を 4 回実行する、というように続きました。
data = rbind(
c(1, 'a', 3, 1),
c(1, 'c', 4, 2),
c(1, 'b', 6, 3),
c(2, 'a', 2, 1),
c(2, 'c', 1, 2),
c(2, 'a', 5, 3)
)
data = as.data.frame(data)
colnames(data) = c('id', 'act', 'times', 'order')
id act times order
1 a 3 1
1 a 4 2
1 b 6 3
2 a 2 1
2 c 1 2
2 a 5 3
まず、このデータセットを長い形式に変換する必要があります。ID ごとに、アクティビティ (順序付け) を実行回数だけ繰り返す必要があります。
id act
1 a
1 a
1 a
...
1 b
2 a
2 a
2 c
2 a
...
私は次のようなものを使用しています
as.data.frame( cbind( as.character( rep(data$id, data$times)), as.character( rep(data$act, data$times))) )
しかし、それはとても面倒です。
私の最初の質問は、この変換を簡素化するための解決策はありますか?
次に、データがこの長い形式に変換されたら、次のようなものを取得するために、もう一度ワイド形式に変換する必要があります
id act_time1 act_time2 act_time3 act_time... act_timeN
"1" "a" "a" "a" "..." "b"
"2" "a" "a" "c" "..." "a"
どうやら、ここでキャストを正しく使用していません
cast(dataLong, formula = V1 ~ V2, value.var = 'V2')
解決策はありますか?