2015-01-15 4 views
11
структуры

данных является:Добавить сумму столбца в таблице

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

@BlakeS. Опция, использующая 'data.table' как заголовок, говорит' dcast.data.table (setDT (df) [, n: =. GRP, Company], Company ~ Семейный, длина, значение.var = 'n') [, Всего: = Уменьшить ('+', .SD), .SDcols = 2: 4] [] ' – akrun

ответ

16

Вы можете использовать cbind и rowSums впоследствии:

tab <- table(df$Company,df$Marital) 
tab <- cbind(tab, Total = rowSums(tab)) 

Вы также можете использовать встроенный в addmargins функции:

tab <- addmargins(table(df$Company,df$Marital), 2) 

(2 означает добавить столбец суммы, но не sum row - вы можете опустить его, и вы получите оба).

+0

Спасибо. Существуют ли существующие функции таблицы, которые делают это автоматически? Предпочли бы избежать второго шага, если это возможно. –

+0

@BlakeS. См. Edit: вы можете использовать 'addmargins' –

11

Вы можете использовать addmargins

x <- table(df$Company,df$Marital) 
addmargins(x)   # option 1 
ftable(addmargins(x)) # option 2 
1


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 
Смежные вопросы