Вычисление и добавление итогов по столбцам Выбранных столбцов во фрейме данных в R

#r #dplyr #tidyverse #janitor

Вопрос:

У меня есть следующий код для расчета определенных величин интереса, в частности суммы двух крайних правых столбцов.

 library(dplyr) library(janitor)  m = c(0, 0.8, 2.3, 4.1, 2.1) l = c(0.3, 0.8, 0.9, 0.75, 0.25)  mytable = data.frame(l, m) rownames(mytable) = paste("Group", 1:5)  # Initial population n0 = c(1,1,1,1,1)  mytable = mytable %gt;%  mutate(lm = l * m) %gt;%  mutate(n = n0) %gt;%  mutate(offspring = lm * n) %gt;%  adorn_totals("row")   

Это дает следующий результат:

 gt; mytable  l m lm n offspring  0.3 0.0 0.000 1 0.000  0.8 0.8 0.640 1 0.640  0.9 2.3 2.070 1 2.070  0.75 4.1 3.075 1 3.075  0.25 2.1 0.525 1 0.525  Total 9.3 6.310 5 6.310  

У меня есть следующие проблемы:

  • Как выделить итоговые значения столбцов для конкретных столбцов? В моем случае я хотел бы получить итоговые данные по столбцам только для столбцов n и offspring . Я прочитал документацию по этой adorn_totals() функции, но не смог понять, как это сделать.
  • Присвоенные имена строк отсутствуют. Как я могу отобразить имена строк и указать слово «Итого» в качестве имени строки для новой строки итогов столбцов?
  • Общее количество строк не отображается для первого столбца, что странно.

Ответ №1:

Один из вариантов состоит в том, чтобы преобразовать столбцы, отличные от требуемых, в character класс, а затем изменить его позже. Что касается имен строк, tibble не допускает имен строк. Возможно, нам сначала потребуется создать колонку с rownames_to_column

 library(dplyr) library(tibble) library(janitor) out lt;- mytable %gt;%   rownames_to_column('rn') %gt;%  mutate(lm = l *m, n = n0, offspring = lm * n) %gt;%   mutate(across(-c(n, offspring), as.character)) %gt;%   adorn_totals('row', fill = NA) %gt;%  type.convert(as.is = TRUE)  

-выход

 gt; out  rn l m lm n offspring  Group 1 0.30 0.0 0.000 1 0.000  Group 2 0.80 0.8 0.640 1 0.640  Group 3 0.90 2.3 2.070 1 2.070  Group 4 0.75 4.1 3.075 1 3.075  Group 5 0.25 2.1 0.525 1 0.525  Total NA NA NA 5 6.310 gt; str(out) Classes ‘tabyl’ and 'data.frame': 6 obs. of 6 variables:  $ rn : chr "Group 1" "Group 2" "Group 3" "Group 4" ...  $ l : num 0.3 0.8 0.9 0.75 0.25 NA  $ m : num 0 0.8 2.3 4.1 2.1 NA  $ lm : num 0 0.64 2.07 3.075 0.525 ...  $ n : int 1 1 1 1 1 5  $ offspring: num 0 0.64 2.07 3.075 0.525 ...  - attr(*, "core")='data.frame': 5 obs. of 6 variables:  ..$ rn : chr [1:5] "Group 1" "Group 2" "Group 3" "Group 4" ...  ..$ l : chr [1:5] "0.3" "0.8" "0.9" "0.75" ...  ..$ m : chr [1:5] "0" "0.8" "2.3" "4.1" ...  ..$ lm : chr [1:5] "0" "0.64" "2.07" "3.075" ...  ..$ n : num [1:5] 1 1 1 1 1  ..$ offspring: num [1:5] 0 0.64 2.07 3.075 0.525  - attr(*, "tabyl_type")= chr "two_way"  - attr(*, "totals")= chr "row"  

Ответ №2:

К вашему первому и третьему пунктам: вы можете контролировать, какие столбцы суммируются, указав имена столбцов в ... аргументе adorn_totals() . Использование ... требует указания значений для других аргументов, даже если они пусты, поэтому ,,,, ниже приведены значения по умолчанию для этих аргументов.

Первый столбец по умолчанию пропускается, так как обычно это идентификатор группы (например, имена строк), но вы можете указать, что он должен быть суммирован.

Вот как вы бы суммировали столбцы l , n , и offspring :

 mytable %gt;%  mutate(lm = l * m) %gt;%  mutate(n = n0) %gt;%  mutate(offspring = lm * n) %gt;%  adorn_totals("row",,,,l, n, offspring)   

ВОЗВРАТ:

 l m lm n offspring  0.30 0 0 1 0.000  0.80 0.8 0.64 1 0.640  0.90 2.3 2.07 1 2.070  0.75 4.1 3.075 1 3.075  0.25 2.1 0.525 1 0.525  3.00 - - 5 6.310  

Вместе с предупреждением:

Поскольку первый столбец был указан для подведения итогов, он не содержит метки «Итого» (или имени, указанного пользователем) в строке итогов