将R数据帧从长格式转换为宽格式 [英] Convert R dataframe from long to wide format
本文介绍了将R数据帧从长格式转换为宽格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下数据:
df <- data.frame(left=letters[1:4], right=replicate(1,sample(0:100,12,rep=TRUE)))
I看起来像这样(由于随机函数,数字可能会有所不同)
I looks like this (numbers might be different because on the random function)
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次。新数据框应如下所示:
The first column is headers for a table, repeating 3 times. The new dataframe should look like this:
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 函数,显示标记为'data.table的问题' rel = tag> data.table 包:
The shortest solution is probably using the rowid
function from the data.table package:
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
这篇关于将R数据帧从长格式转换为宽格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文