首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dcast多列独立

dcast多列独立
EN

Stack Overflow用户
提问于 2019-12-15 12:30:01
回答 2查看 90关注 0票数 2

这能在一条线上完成吗?这个例子是针对两个变量的,但是我想更多地使用它,这使得这种方法变得很麻烦。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-15 16:17:44

如果我们使用data.table,那么首先使用melt并使用dcast

代码语言:javascript
复制
library(data.table)
dcast(melt(as.data.table(mpg[c('year', 'cyl', 'class')]), 
        id.var = 'year'), year ~ value)

使用[]链接的版本如下所示:

代码语言:javascript
复制
mpg = as.data.table(mpg[c('year', 'cyl', 'class')])
mpg[ , melt(.SD, id.var = 'year')
    ][ , dcast(.SD, year ~ value, fun.aggregate=length)]

或者使用来自recastreshape2 (单线)

代码语言:javascript
复制
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”有不同的“类型”。但是,因为我们只是在找length,所以没问题

票数 4
EN

Stack Overflow用户

发布于 2019-12-15 16:19:40

我发现了一个非常简单但非常灵活的使用table的解决方案

代码语言:javascript
复制
(do.call(cbind, lapply(list("cyl", "class"), function(x) {
  table(mpg[, c("year", x)])
})))
      4 5  6  8 2seater compact midsize minivan pickup subcompact suv
1999 45 0 45 27       2      25      20       6     16         19  29
2008 36 4 34 43       3      22      21       5     17         16  33

要获得更多变量,只需将它们添加到列表中即可。

代码语言:javascript
复制
(do.call(cbind, lapply(list("cyl", "class", "drv"), function(x) {
  table(mpg[, c("year", x)])
})))
      4 5  6  8 2seater compact midsize minivan pickup subcompact suv  4  f  r
1999 45 0 45 27       2      25      20       6     16         19  29 49 57 11
2008 36 4 34 43       3      22      21       5     17         16  33 54 49 14
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59343907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档