NM_*_*NM_ 5 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 %>%
mutate(lm = l * m) %>%
mutate(n = n0) %>%
mutate(offspring = lm * n) %>%
adorn_totals("row")
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出:
> 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
Run Code Online (Sandbox Code Playgroud)
我有以下问题:
n和的列总计offspring。我阅读了该函数的文档adorn_totals(),但不知道如何执行此操作。...对于第一点和第三点:您可以通过为 的参数指定列名来控制合计哪些列adorn_totals()。使用...需要指定其他参数的值,即使它们是空的,因此下面,,,,接受这些参数的默认值。
默认情况下会跳过第一列,因为这通常是组 ID(如您的行名),但您可以指定应对其进行总计。
l以下是对、n和列求和的方法offspring:
mytable %>%
mutate(lm = l * m) %>%
mutate(n = n0) %>%
mutate(offspring = lm * n) %>%
adorn_totals("row",,,,l, n, offspring)
Run Code Online (Sandbox Code Playgroud)
返回:
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
Run Code Online (Sandbox Code Playgroud)
伴随着警告:
由于第一列被指定为总计,因此总计行中不包含标签“Total”(或用户指定的名称)
一个选项是将所需列以外的列转换为character类,然后稍后再更改。关于行名称,tibble不允许使用行名称。我们可能需要先创建一个列rownames_to_column
library(dplyr)\nlibrary(tibble)\nlibrary(janitor)\nout <- mytable %>% \n rownames_to_column('rn') %>%\n mutate(lm = l *m, n = n0, offspring = lm * n) %>% \n mutate(across(-c(n, offspring), as.character)) %>% \n adorn_totals('row', fill = NA) %>%\n type.convert(as.is = TRUE)\nRun Code Online (Sandbox Code Playgroud)\n-输出
\n> out\n rn l m lm n offspring\n Group 1 0.30 0.0 0.000 1 0.000\n Group 2 0.80 0.8 0.640 1 0.640\n Group 3 0.90 2.3 2.070 1 2.070\n Group 4 0.75 4.1 3.075 1 3.075\n Group 5 0.25 2.1 0.525 1 0.525\n Total NA NA NA 5 6.310\n> str(out)\nClasses \xe2\x80\x98tabyl\xe2\x80\x99 and 'data.frame': 6 obs. of 6 variables:\n $ rn : chr "Group 1" "Group 2" "Group 3" "Group 4" ...\n $ l : num 0.3 0.8 0.9 0.75 0.25 NA\n $ m : num 0 0.8 2.3 4.1 2.1 NA\n $ lm : num 0 0.64 2.07 3.075 0.525 ...\n $ n : int 1 1 1 1 1 5\n $ offspring: num 0 0.64 2.07 3.075 0.525 ...\n - attr(*, "core")='data.frame': 5 obs. of 6 variables:\n ..$ rn : chr [1:5] "Group 1" "Group 2" "Group 3" "Group 4" ...\n ..$ l : chr [1:5] "0.3" "0.8" "0.9" "0.75" ...\n ..$ m : chr [1:5] "0" "0.8" "2.3" "4.1" ...\n ..$ lm : chr [1:5] "0" "0.64" "2.07" "3.075" ...\n ..$ n : num [1:5] 1 1 1 1 1\n ..$ offspring: num [1:5] 0 0.64 2.07 3.075 0.525\n - attr(*, "tabyl_type")= chr "two_way"\n - attr(*, "totals")= chr "row"\nRun Code Online (Sandbox Code Playgroud)\n