英文:
add a total row in a dplyr code but just under a specifc colum
问题
我有这个数据集
结构(列表(col2 = c(1, 1, 2, 3, 1, 2, 2, 3, 1, 2), col1 = c("R",
"R", "R", "R", "R", "L", "R", "R", "R", "R")), 类 = c("分组_df",
"tbl_df", "tbl", "数据框"), 行名 = c(NA, -10L), 分组 = 结构(列表(
col1 = c("L", "R", "R", "R"), col2 = c(2, 1, 2, 3), .rows = 结构(列表(
6L, c(1L, 2L, 5L, 9L), c(3L, 7L, 10L), c(4L, 8L)), 类型 = 整数(0), 类 = c("vctrs_list_of",
"vctrs_vctr", "列表"))), 类 = c("tbl_df", "tbl", "数据框"
), 行名 = c(NA, -4L), .drop = TRUE))
我想做的是在'n'列下只添加最后一行(用dplyr创建的新行),并添加“总计”列。我尝试了这段代码,但是我得到了每列的总计。
```R
库(janitor)
数据 %>%
按(col1, col2) %>%
变异(col1 = recode(col1, 'R(更改文件名)' = 'R',
'L(更改名称和数据EEG文件)' = 'L')) %>%
汇总(n = n()) %>%
adorn_totals("row")
我渴望学会如何修复它或者其他实现这个目的的策略。
谢谢
英文:
I have this data set
structure(list(col2 = c(1, 1, 2, 3, 1, 2, 2, 3, 1, 2), col1 = c("R",
"R", "R", "R", "R", "L", "R", "R", "R", "R")), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -10L), groups = structure(list(
col1 = c("L", "R", "R", "R"), col2 = c(2, 1, 2, 3), .rows = structure(list(
6L, c(1L, 2L, 5L, 9L), c(3L, 7L, 10L), c(4L, 8L)), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -4L), .drop = TRUE))
what I would like to do is just add only a final row under 'n' column (the new created with dplyr) wit column total. I have tried with this code, but I get total for every columns.
library(janitor)
data %>%
group_by(col1, col2) %>%
mutate(col1 = recode(col1, 'R (change file name)' = 'R',
'L (change name e data EEG file)' = 'L')) %>%
summarise(n = n()) %>%
adorn_totals("row")
I would be eager to learn how to fix it or other strategy for this purpose.
Thanks
答案1
得分: 3
你可以使用bind_rows
在summarise
中添加一行,其中summarise
的结果为n的总和和col1的总和。你的第一个summarise
已经被改成了reframe
,以便得到一个无分组的数据框,就像这样:
library(dplyr)
data %>%
group_by(col1, col2) %>%
mutate(col1 = recode(col1, 'R (change file name)' = 'R',
'L (change name e data EEG file)' = 'L')) %>%
reframe(n = n()) %>%
bind_rows(summarise(., across(n, sum), across(col1, ~ "Total")))
#> # A tibble: 5 × 3
#> col1 col2 n
#> <chr> <dbl> <int>
#> 1 L 2 1
#> 2 R 1 4
#> 3 R 2 3
#> 4 R 3 2
#> 5 Total NA 10
英文:
You could use bind_rows
to add a row with summarise
which has sum
for n and total for col1. Your first summarise
has been changed to reframe
to have an ungrouped dataframe like this:
library(dplyr)
data %>%
group_by(col1, col2) %>%
mutate(col1 = recode(col1, 'R (change file name)' = 'R',
'L (change name e data EEG file)' = 'L')) %>%
reframe(n = n()) %>%
bind_rows(summarise(., across(n, sum), across(col1, ~ "Total")))
#> # A tibble: 5 × 3
#> col1 col2 n
#> <chr> <dbl> <int>
#> 1 L 2 1
#> 2 R 1 4
#> 3 R 2 3
#> 4 R 3 2
#> 5 Total NA 10
Old answer with different dataset from OP:
You could use the adorn_totals
function from the janitor
package like this:
library(dplyr)
library(janitor)
data %>%
group_by(col1, col2) %>%
mutate(col1 = recode(col2, 'R (change file name)' = 'R',
'L (change name e data EEG file)' = 'L')) %>%
summarise(n = n()) %>%
adorn_totals("row")
#> `summarise()` has grouped output by 'col1'. You can override using the
#> `.groups` argument.
#> col1 col2 n
#> L L (change name e data EEG file) 1
#> R R 8
#> R R (change file name) 1
#> Total - 10
<sup>Created on 2023-03-09 with reprex v2.0.2</sup>
答案2
得分: 2
这是使用 `adorn_totals` 的方法:
`adorn_totals` 有一个 `...` 参数:使用 ... 需要为其他参数指定值,即使它们是空的,因此下面的 ,,,, 用于接受这些参数的默认值。请参考 @Sam Firke 的原始答案 <https://stackoverflow.com/questions/69745242/calculating-and-appending-column-totals-of-select-columns-in-a-data-frame-in-r>
库(dplyr)
库(janitor)
df %>%
按(col1, col2) %>%
变异(col1 = recode(col1, 'R (change file name)' = 'R',
'L (change name e data EEG file)' = 'L')) %>%
总结(n = n()) %>%
adorn_totals("row",,,,,n)
col1 col2 n
L 2 1
R 1 4
R 2 3
R 3 2
总计 - 10
英文:
Here is how we could do it with adorn_totals
:
adorn_totals
has a ...
argument: Using ... requires specifying values for the other arguments, even if they're empty, thus the ,,,, below to accept the default values for those arguments. See original answer by @Sam Firke <https://stackoverflow.com/questions/69745242/calculating-and-appending-column-totals-of-select-columns-in-a-data-frame-in-r>
library(dplyr)
library(janitor)
df %>%
group_by(col1, col2) %>%
mutate(col1 = recode(col1, 'R (change file name)' = 'R',
'L (change name e data EEG file)' = 'L')) %>%
summarise(n = n()) %>%
adorn_totals("row",,,,n)
col1 col2 n
L 2 1
R 1 4
R 2 3
R 3 2
Total - 10
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论