将序列摘要数据转换为长格式和宽格式

时间:2015-06-04 11:22:09

标签: r casting sequence dplyr rep

我需要转换一些摘要形式的数据。 首先进入长格式然后进入宽格式。

对于每个id,我们有id执行活动的次数。 订购数据。

例如,对于id 1,他首先执行3次“a”,然后执行4次“c”,依此类推。

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

任何解决方案?

0 个答案:

没有答案