簡體   English   中英

dcast 多列獨立

[英]dcast multiple columns independently

這可以在一行中完成嗎? 該示例適用於兩個變量,但我想將其用於更多變量,這使得這種方法很麻煩。

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”列具有不同的“類型”。 但是,因為我們只是在尋找length所以沒關系

我使用table找到了一個相當簡單但非常靈活的解決方案:

(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

對於更多變量,只需將它們添加到列表中。

(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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM