r - 独立转换多列

标签 r data.table

这可以在一行中完成吗?该示例适用于两个变量,但我想将它用于更多变量,这使得这种方法很麻烦。

library(ggplot2)
library(data.table)
library(dplyr)

a <- dcast(mpg, year ~ cyl, fun=length, value.var = "cyl")
b <- dcast(mpg, year ~ class, fun=length, value.var = "class")
c <- inner_join(a, b, by = "year")

> c
  year  4 5  6  8 2seater compact midsize minivan pickup subcompact suv
1 1999 45 0 45 27       2      25      20       6     16         19  29
2 2008 36 4 34 43       3      22      21       5     17         16  33

最佳答案

如果我们使用data.table,那么先melt然后使用dcast

library(data.table)
dcast(melt(as.data.table(mpg[c('year', 'cyl', 'class')]), 
        id.var = 'year'), year ~ value)

带有 [] 链接的版本看起来像:

mpg = as.data.table(mpg[c('year', 'cyl', 'class')])
mpg[ , melt(.SD, id.var = 'year')
    ][ , dcast(.SD, year ~ value, fun.aggregate=length)]

或者使用 reshape2 中的 recast(单行)

library(reshape2)
recast(mpg[c('year', 'cyl', 'class')], id.var = 'year', year ~ value)
#  year 2seater  4 5  6  8 compact midsize minivan pickup subcompact suv
#1 1999       2 45 0 45 27      25      20       6     16         19  29
#2 2008       3 36 4 34 43      22      21       5     17         16  33

注意:列“cyl”、“class”具有不同的“type”。但是,因为我们只是在寻找 length 没关系

关于r - 独立转换多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59343907/

相关文章:

r - dplyr/ggplot 使用管道

r - R 的特性是否与系统相关?

R:数据表。如何使用 fwrite 正确保存日期?

r - 将逐元素函数应用于 data.table 列

r - 数据帧列表,但每个列表项都有 df 和另一个值,无法使用 bind_rows() 来组合它们

r - 使用 rCharts 创建 NVD3 半圆 donut

R:如何使用 data.table 输入函数来创建函数

r - data.table 后端的 dplyr 错误 [在 dplyr 0.4.3 或更早版本中]

R:按列组聚合数据 - 使用每个观察值对列进行变异

r - 列/变量的虚拟化