R 通过除一个字符变量以外的所有字符变量聚合数据帧列表的所有数字变量
我有一个数据帧/文件列表,如下所示:R 通过除一个字符变量以外的所有字符变量聚合数据帧列表的所有数字变量,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我有一个数据帧/文件列表,如下所示: library(tidyverse) l <- list(capacity = tribble(~plant, ~month, ~max_capacity, ~min_capacity, "A", "202001", 3000.0, 5000.0, "A", "202002", 2000.0, 4500.0,
library(tidyverse)
l <- list(capacity = tribble(~plant, ~month, ~max_capacity, ~min_capacity,
"A", "202001", 3000.0, 5000.0,
"A", "202002", 2000.0, 4500.0,
"B", "202001", 5000.0, 8000.0),
demand = tribble(~region, ~month, ~demand,
"1", "202001", 234.3,
"1", "202002", 159.9,
"2", "202001", 488))
我们可以使用
Filter
和setdiff
找到要分组的列,将其传递给groupby\u at
,后者接受字符串参数,并使用summary\u if
对数值列求和
library(dplyr)
purrr::map(l, ~{
cols <- setdiff(names(Filter(is.character, .x)), 'month')
.x %>% group_by_at(cols) %>% summarise_if(is.numeric, sum)
})
#$capacity
# A tibble: 2 x 3
# plant max_capacity min_capacity
# <chr> <dbl> <dbl>
#1 A 5000 9500
#2 B 5000 8000
#$demand
# A tibble: 2 x 2
# region demand
# <chr> <dbl>
#1 1 394.
#2 2 488
库(dplyr)
地图(l~{
列%group\u by\u at(列)%>%Summary\u if(is.numeric,sum)
})
#美元容量
#一个tibble:2x3
#工厂最大容量最小容量
#
#1 A 5000 9500
#2b 5000 8000
#美元需求
#一个tibble:2x2
#区域需求
#
#1 1 394.
#2 2 488
请注意,在较新版本的
dplyr
中,如果很快将被中的替换为,则对进行总结 我们可以使用Filter
和setdiff
找到要分组的列,将其传递给groupby\u at
,后者接受字符串参数,并使用summary\u if
对数值列求和
library(dplyr)
purrr::map(l, ~{
cols <- setdiff(names(Filter(is.character, .x)), 'month')
.x %>% group_by_at(cols) %>% summarise_if(is.numeric, sum)
})
#$capacity
# A tibble: 2 x 3
# plant max_capacity min_capacity
# <chr> <dbl> <dbl>
#1 A 5000 9500
#2 B 5000 8000
#$demand
# A tibble: 2 x 2
# region demand
# <chr> <dbl>
#1 1 394.
#2 2 488
库(dplyr)
地图(l~{
列%group\u by\u at(列)%>%Summary\u if(is.numeric,sum)
})
#美元容量
#一个tibble:2x3
#工厂最大容量最小容量
#
#1 A 5000 9500
#2b 5000 8000
#美元需求
#一个tibble:2x2
#区域需求
#
#1 1 394.
#2 2 488
请注意,在较新版本的dplyr
中,如果很快将被中的替换为,则对进行总结