1

要約の形で提供されるデータを変換する必要があります。最初にロングフォーマットに、次にワイドフォーマットに。

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')

解決策はありますか?

4

0 に答える 0