R组小计

时间:2018-08-16 13:47:23

标签: r subtotal

我正试图找到一个类似于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的新手,所以很抱歉这是一个非常简单的问题。

谢谢!

2 个答案:

答案 0 :(得分:4)

在末尾的注释中使用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))

答案 1 :(得分:1)

您可以使用bind_rows中的countdplyr来做到这一点。

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)