将R数据帧从长格式转换为宽格式

时间:2016-01-25 20:28:34

标签: r dataframe

我有以下数据:

 df <- data.frame(left=letters[1:4], right=replicate(1,sample(0:100,12,rep=TRUE)))

我看起来像这样(数字可能因为随机函数而有所不同)

   left  right
1     a     6
2     b    97
3     c    78
4     d    28
5     a    61
6     b    58
7     c    56
8     d    28
9     a    90
10    b    83
11    c    72
12    d    17

第一列是表格的标题,重复3次。新数据框应如下所示:

a  b  c  d
6  97 78 28
61 58 56 28
90 83 72 17

当我使用

spread(df,left, right)

它看起来像这样:

    a  b  c  d
1   6 NA NA NA
2  NA 97 NA NA
3  NA NA 78 NA
4  NA NA NA 28
5  61 NA NA NA
6  NA 58 NA NA
7  NA NA 56 NA
8  NA NA NA 28
9  90 NA NA NA
10 NA 83 NA NA
11 NA NA 72 NA
12 NA NA NA 17

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

最短的解决方案可能是使用包中的rowid函数:

library(data.table)
dt <- dcast(setDT(df), rowid(left) ~ left, value.var = "right")
dt[, names(dt)[1] := NULL]

给出:

> dt
    a  b  c  d
1: 18 52 67 12
2: 36 74 61 86
3: 81 41 82  3

答案 1 :(得分:0)

坚持使用dplyr和tidyr(感谢它不像其他答案那样整洁!):

PATH