#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
Вместе с предупреждением:
Поскольку первый столбец был указан для подведения итогов, он не содержит метки «Итого» (или имени, указанного пользователем) в строке итогов