R 组小计
subtotals by group R
我试图找到一个类似于 SAS Proc Means 的函数,它将聚合数据并 subtotal/total 分组。
例如我有:
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 的新手,所以如果这是一个相当简单的问题,我很抱歉。
谢谢!
您可以使用 bind_rows
and count
from dplyr
执行此操作。
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)
在末尾的注释中使用 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))
我试图找到一个类似于 SAS Proc Means 的函数,它将聚合数据并 subtotal/total 分组。
例如我有:
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 的新手,所以如果这是一个相当简单的问题,我很抱歉。
谢谢!
您可以使用 bind_rows
and count
from dplyr
执行此操作。
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)
在末尾的注释中使用 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))