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
中,如果很快将被中的替换为,则对进行总结