随着x
与列V1
和V2
,您可以添加指数计算在每个级别中的元素与数据帧:
> x$V0 <- ave(x$V1, x$V1, FUN=seq_along)
> x
V1 V2 V0
1 1 233 1
2 1 333 2
3 1 455 3
4 1 345 4
5 2 543 1
6 2 433 2
7 2 344 3
8 2 400 4
9 3 444 1
10 3 111 2
11 3 0 3
12 3 432 4
现在申请reshape
:
> reshape(x, direction='wide', timevar='V1', idvar='V0')
V0 V2.1 V2.2 V2.3
1 1 233 543 444
2 2 333 433 111
3 3 455 344 0
4 4 345 400 432
x
:
structure(list(V1 = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 3L), V2 = c(233L, 333L, 455L, 345L, 543L, 433L, 344L, 400L,
444L, 111L, 0L, 432L)), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA,
-12L))
无论如何,如果你创建了一个新的列'df $ id = 1:4',那么它看起来像你在这个问题的范围:http://stackoverflow.com/questions/9617348/reshape-three-column-数据帧到矩阵,可以做'library(reshape2); acast(df,id〜V1,value.var =“V2”)' – Frank
@Frank:对不起。我试图更好地解释。我有几个价值每个级别。例如对于第一级,我有四个值(233,333,455,345)。并且每个值与它的级别一起被解决。我想将一个特定级别的所有值放在一列中,而不是将多行放在一个级别的一个值中。现在清楚了吗? – zara
也许'do.call(cbind,split(df [-1],df [[1]]))' –