【问题标题】:subtotals by group R按 R 组小计
【发布时间】:2018-08-16 13:47:22
【问题描述】:

我试图找到一个类似于 SAS 的 Proc Means 的函数,它将聚合数据并按组小计/总计。

例如我有:

Var1    Var2
 a       b  
 a       c  
 b       b

我想创建:

Var1    Var2    N
 a       b      1
 a       c      1
 b       b      1
 na      b      2
 na      c      1
 a       na     2
 b       na     1
 na      na     3 

我发现 Summarise() 和 Aggregate() 能够做到这一点,但没有小计。 还有一个用于 data.table 的 Cube() 函数正在开发中,但由于我们的 IT 安全政策,我只能从 CRAN 下载。

您可能会说,我是 R 新手,所以如果这是一个相当简单的问题,我很抱歉。

谢谢!

【问题讨论】:

标签: r subtotal


【解决方案1】:

在最后的注释中使用DF 试试这个单行。如果列数不同,则相同的代码有效。也可以在没有as.data.frame 的情况下尝试宽格式。没有使用任何包。

as.data.frame(addmargins(xtabs(~., DF)))

给予:

  Var1 Var2 Freq
1    a    b    1
2    b    b    1
3  Sum    b    2
4    a    c    1
5    b    c    0
6  Sum    c    1
7    a  Sum    2
8    b  Sum    1
9  Sum  Sum    3

注意

DF 的可重现形式是:

DF <- structure(list(Var1 = structure(c(1L, 1L, 2L), .Label = c("a", 
"b"), class = "factor"), Var2 = structure(c(1L, 2L, 1L), .Label = c("b", 
"c"), class = "factor")), class = "data.frame", row.names = c(NA, 
-3L))

【讨论】:

    【解决方案2】:

    这是一种可以做到这一点的方法,使用来自dplyrbind_rowscount

    library(dplyr)
    
    dat %>% count(Var1, Var2) %>% # count by Var1 and Var2
        bind_rows(dat %>% count(Var1)) %>% # count by Var1
        bind_rows(dat %>% count(Var2)) %>% # count by Var2
        bind_rows(dat %>% count) # count rows
    
      Var1  Var2      n
      <chr> <chr> <int>
    1 a     b         1
    2 a     c         1
    3 b     b         1
    4 a     NA        2
    5 b     NA        1
    6 NA    b         2
    7 NA    c         1
    8 NA    NA        3
    

    数据

    dat <- read.table(text = "Var1    Var2
     a       b  
     a       c  
     b       b", stringsAsFactors = FALSE, header = TRUE)
    

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 2022-09-22
      • 2022-07-22
      • 1970-01-01
      相关资源
      最近更新 更多