2015-09-14 40 views
-1

我有这样一个数据:怎么行转换成列,而不repeition

1 233 
1 333 
1 455 
1 345 
2 543 
2 433 
2 344 
2 400 
3 444 
3 111 
3 000 
3 432 

我想将它更改为新的数据集是这样的:

1 2 3 
233 543 444 
333 433 111 
455 344 000 
345 400 432 

我怎样才能做到这一点R'有没有人知道这个剧本。请注意我的真实数据非常大,行数很大。

+0

无论如何,如果你创建了一个新的列'df $ id = 1:4',那么它看起来像你在这个问题的范围:http://stackoverflow.com/questions/9617348/reshape-three-column-数据帧到矩阵,可以做'library(reshape2); acast(df,id〜V1,value.var =“V2”)' – Frank

+0

@Frank:对不起。我试图更好地解释。我有几个价值每个级别。例如对于第一级,我有四个值(233,333,455,345)。并且每个值与它的级别一起被解决。我想将一个特定级别的所有值放在一列中,而不是将多行放在一个级别的一个值中。现在清楚了吗? – zara

+1

也许'do.call(cbind,split(df [-1],df [[1]]))' –

回答

1

随着x与列V1V2,您可以添加指数计算在每个级别中的元素与数据帧:

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

我的解决方案将在短条目结尾添加“NA”值。 –