数据结构是:
Company Marital
a single
a married
b widow
c married
b single
我正在使用table(df$Company,df$Marital)
,但我希望有一个显示行总计的列,例如以下内容:
a b c Total
married 50 20 5 75
single 10 10 10 30
widow 5 50 0 55
是否有不同的表函数提供行和附加选项?
答案 0 :(得分:21)
之后您可以使用cbind
和rowSums
:
tab <- table(df$Company,df$Marital)
tab <- cbind(tab, Total = rowSums(tab))
您还可以使用内置的addmargins
功能:
tab <- addmargins(table(df$Company,df$Marital), 2)
(2
表示添加一个总和列,但不是一个总和行 - 你可以省略它,你就可以得到它们。)
答案 1 :(得分:13)
您可以使用addmargins
x <- table(df$Company,df$Marital)
addmargins(x) # option 1
ftable(addmargins(x)) # option 2
答案 2 :(得分:4)
library(dplyr)
df <- tribble(
~status, ~a, ~b, ~c,
"married", 50, 20, 5,
"single", 10, 10, 10,
"widow", 5, 50, 0
)
df %>%
mutate(Total_Row = rowSums(.[2:4]))
#> # A tibble: 3 x 5
#> status a b c Total_Row
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 married 50.0 20.0 5.00 75.0
#> 2 single 10.0 10.0 10.0 30.0
#> 3 widow 5.00 50.0 0 55.0
df %>%
mutate(Total_Row = select(., 2:4) %>% rowSums())
#> # A tibble: 3 x 5
#> status a b c Total_Row
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 married 50.0 20.0 5.00 75.0
#> 2 single 10.0 10.0 10.0 30.0
#> 3 widow 5.00 50.0 0 55.0
答案 3 :(得分:1)
janitor包中的tabyl
函数就是这样做的。使用您的数据:
library(janitor)
dat %>%
tabyl(Marital, Company) %>%
adorn_totals("col")
Marital a b c Total
married 1 0 1 2
single 1 1 0 2
widow 0 1 0 1
自我推销披露:我编写并维护了这个包。发布这个答案,因为问题是关于支持添加总计的table()的替代方法 - 这正是tabyl()所做的。