向表中添加列总和

时间:2015-01-15 17:40:14

标签: r

数据结构是:

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

是否有不同的表函数提供行和附加选项?

4 个答案:

答案 0 :(得分:21)

之后您可以使用cbindrowSums

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()所做的。