我有以下数据:
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
有什么想法吗?
答案 0 :(得分:2)
最短的解决方案可能是使用data.table包中的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