移调/重塑列的行与给定的条件

移调/重塑列的行与给定的条件

问题描述:

我有以下数据:移调/重塑列的行与给定的条件

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

有可能是一种更好的方式来获得我称之为idx的方式,这实际上是什么变成了列标题。不用创建newdat数据集就可以做到这一点,但这是我想到的。

+0

好吧,这确实工作得非常好!非常感谢!还有一个问题:在我的原始数据中,每个用户和组都有多达120个请求。 cast似乎改变了idx变量的顺序,如'request1 request2 request3 request4 request5 request6 request10 request11 request7'等。如何处理? – ahs85

+0

找到答案[here](http://*.com/questions/8266915/create-vector-with-fixed-width-fill-with-0/8267036#8267036):而不是'idx = paste(“request “,1:length(request),sep =”“)','idx = sprintf(”request_%03d“,1:length(request))'很好用! – ahs85

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 
+0

我在这里得到一个错误:'得到(as.character(FUN),mode =“function”,envir = envir)中的错误: object'没有找到mode'function'的'FUN' – ahs85

+0

**编辑**:'FUN =“c”'起作用。 – ahs85