我有以下数据:
request user group
1 1 1
4 1 1
7 1 1
5 1 2
8 1 2
1 2 3
4 2 3
7 2 3
9 2 4
我想提取请求序列并将它们转换为列。
结果应如下所示:
user group request1 request2 request3
1 1 1 4 7
1 2 5 8 NA
2 3 1 4 7
2 4 9 NA NA
我尝试用ddply(plyr)做到这一点,但没有找到可行的解决方案。
提前致谢!
答案 0 :(得分:4)
library(reshape)
# Make some fake data
dat <- data.frame(user = c(1,1,1,2,2,3), group = c(1,1,1,1,1,2), request = c(1,4,7,5,8,1))
# Add in an ordered id
newdat <- ddply(dat, .(user, group), transform, idx = paste("request", 1:length(request), sep = ""))
# Use cast to get what we want
cast(newdat, user + group ~ idx, value = .(request))
可能有一种更好的方式来获得我称之为idx的内容,这实际上就是列标题。可以在不创建newdat数据集的情况下执行此操作,但这是我的想法。
答案 1 :(得分:2)
aggregate
让你非常接近:
dat <- data.frame(
user = c(1,1,1,2,2,3,3,3,4),
group = c(1,1,1,1,1,2,2,2,2),
request = c(1,4,7,5,8,1,4,7,9)
)
aggregate(request~group + user, dat, FUN=c)
group user request
1 1 1 1, 4, 7
2 1 2 5, 8
3 2 3 1, 4, 7
4 2 4 9