R 使用给定条件对列中的行进行转置/重塑

R 使用给定条件对列中的行进行转置/重塑,r,R,我有以下数据: 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 reques

我有以下数据:

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)实现这一点,但没有找到有效的解决方案

提前谢谢

库(重塑)
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))
#伪造数据
dat
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

dat我在这里得到一个错误:
get中的错误(as.character(FUN),mode=“function”,envir=envir):没有找到模式“function”的对象“FUN”
Ok,这确实很有效!谢谢!还有一个问题:在我的原始数据中,每个用户和组最多有120个请求。Cast似乎改变了idx变量的顺序,如
request1 request2 request3 request4 request5 request6 request10 request11 request7
等。如何处理?找到了答案:而不是
idx=paste(“request”,1:length(request),sep=“”)
idx=sprintf(“request\u%03d”,1:length(request))
效果很好!