我需要转换一些摘要形式的数据。 首先进入长格式然后进入宽格式。
对于每个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')
任何解决方案?