我有相同的数据集,但有886,120行(34个ID,每个ID有22,271行)要转换为34行,22,271列。
Raw ID(34) Values(22,271 for each ID)
1 AND 0.08333
2 BEL 0.08333
3 ARR 0.2292
4 AND 0.3056
5 AND 0.3056
6 BEL 0.3333
7 AKT 0.3421
8 BEL 0.3667
9 AKTK 0.3684
10 ARR 0.4583
11 ARR 0.4583
12 AKTK 0.7105
...
886120 ARR 0.2152
===========================================
To be convert with the following format:
===========================================
ID Value1 Value2 Value3 ... Value22,721
AKTK 0.7105 0.3421 0.3684
AND 0.3056 0.3056 0.08333
ARR 0.4583 0.4583 0.2292
BEL 0.3333 0.3667 0.08333
有人能帮助我吗?
答案 0 :(得分:1)
如果您的数据框按ID排序,则可以使用。您添加一列描述应该在结果列中一起出现的值组,然后这可以工作:
df <- data.frame(ID=rep(LETTERS,100),
valueID=rep(1:100,each=26),
values=rnorm(2600))
library(reshape2)
df2 <- dcast(df,ID~valueID)
所以也许你可以做到
oo <- order(your.df$ID)
df <- cbind(your.df[oo,],valueID=paste0('value',rep(1:22721,each=34)))
然后做我上面做的。 @ akrun的data.table解决方案也有效,因为N和ID一起指定了一个唯一的单元格,所以意味着不做任何贡献。但在这两种情况下,您都需要先排序。