如何将行转换为列而不重复

时间:2015-09-14 22:00:45

标签: r

我有这样的数据:

df

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

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

我怎样才能在R中这样做?任何人都知道这个脚本。请注意,我的实际数据非常大,行数很大。

1 个答案:

答案 0 :(得分: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))