R 添加';总计';df中列中每个组的行
我有一个数据框,可以在其中对列R 添加';总计';df中列中每个组的行,r,dataframe,R,Dataframe,我有一个数据框,可以在其中对列size进行分组。当数据帧按大小排列时,我希望在df中以行的形式显示每个组的每列的总数 library(dplyr) dat <- data.frame(size = c("S", "XS", "L", "M", "L", "L", "XS"), category = c("shirt&q
size
进行分组。当数据帧按大小排列时,我希望在df中以行的形式显示每个组的每列的总数
library(dplyr)
dat <- data.frame(size = c("S", "XS", "L", "M", "L", "L", "XS"),
category = c("shirt", "shirt", "shirt", "shirt", "pants", "hat", "pants"),
store1 = c(22, 3, 52, 10, 5, 37, 21),
store2 = c(43, 13, 2, 24, 6, 12, 40))
dat %>%
arrange(size)
size category store1 store2
1 L shirt 52 2
2 L pants 5 6
3 L hat 37 12
4 M shirt 10 24
5 S shirt 22 43
6 XS shirt 3 13
7 XS pants 21 40
任何建议都将不胜感激 请注意,请求不是。因此,可能需要将摘要统计信息版本存储在其他对象中。除此之外,下面将创建一个包含存储总计的对象,以及另一个对象,其中新类别“总计”描述该大小的存储总计
library( tidyverse )
library( janitor )
dat %>%
dplyr::arrange( size ) %>%
split( .[,"size"] ) %>%
purrr::map_df(., janitor::adorn_totals)
# size category store1 store2
# L shirt 52 2
# L pants 5 6
# L hat 37 12
# Total - 94 20
# M shirt 10 24
# Total - 10 24
# S shirt 22 43
# Total - 22 43
# XS shirt 3 13
# XS pants 21 40
# Total - 24 53
store_totals <- dat %>%
group_by(size) %>%
summarise(store1 = sum(store1),
store2 = sum(store2))
newdat <- add_row(.data = dat,
store_totals) %>%
arrange(size)
newdat$category[is.na(newdat$category)] <- "total"
请注意,请求不是。因此,可能需要将摘要统计信息版本存储在其他对象中。除此之外,下面将创建一个包含存储总计的对象,以及另一个对象,其中新类别“总计”描述该大小的存储总计
store_totals <- dat %>%
group_by(size) %>%
summarise(store1 = sum(store1),
store2 = sum(store2))
newdat <- add_row(.data = dat,
store_totals) %>%
arrange(size)
newdat$category[is.na(newdat$category)] <- "total"
使用
group\u modify
将摘要行绑定到组数据的末尾,然后在最终的mutate中修复总计行上的大小和类别字段。
我们在结尾使用了data.frame
,因为它的输出看起来更好一些,但是可以省略。如果不需要问题中所示的精确输出形式,则可以稍微简化。这只使用dplyr
dat %>%
group_by(size) %>%
group_modify(~ bind_rows(., summarize(., across(where(is.numeric), sum)))) %>%
ungroup %>%
mutate(category = coalesce(category, paste("Total", size)),
size = if_else(startsWith(category, "Total"), "", size)) %>%
data.frame
给予:
size category store1 store2
1 L shirt 52 2
2 L pants 5 6
3 L hat 37 12
4 Total L 94 20
5 M shirt 10 24
6 Total M 10 24
7 S shirt 22 43
8 Total S 22 43
9 XS shirt 3 13
10 XS pants 21 40
11 Total XS 24 53
使用
group\u modify
将摘要行绑定到组数据的末尾,然后在最终的mutate中修复总计行上的大小和类别字段。
我们在结尾使用了data.frame
,因为它的输出看起来更好一些,但是可以省略。如果不需要问题中所示的精确输出形式,则可以稍微简化。这只使用dplyr
dat %>%
group_by(size) %>%
group_modify(~ bind_rows(., summarize(., across(where(is.numeric), sum)))) %>%
ungroup %>%
mutate(category = coalesce(category, paste("Total", size)),
size = if_else(startsWith(category, "Total"), "", size)) %>%
data.frame
给予:
size category store1 store2
1 L shirt 52 2
2 L pants 5 6
3 L hat 37 12
4 Total L 94 20
5 M shirt 10 24
6 Total M 10 24
7 S shirt 22 43
8 Total S 22 43
9 XS shirt 3 13
10 XS pants 21 40
11 Total XS 24 53