将R数据帧从长格式转换为宽格式 [英] Convert R dataframe from long to wide format

查看:60
本文介绍了将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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆