我有以下数据:
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
任何想法?
最短的解决方案可能是使用rowid
函数从数据表 /questions/tagged/data.table包裹:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)