gpt4 book ai didi

r - 根据列名向量在列表中按列子集数据帧并汇总列

转载 作者:行者123 更新时间:2023-12-04 02:01:02 25 4
gpt4 key购买 nike

我有一个包含 40 个数据帧的列表。例如,一个子集看起来像:

d1<-data.frame(a=c(1,2,3,4,5), b=c("2006", "2006", "2006", "2007", "2007"), d=c(6,7,8,9,10), e=c(11,12,13,14,15))
d2<-data.frame(a=c(1,2,3,4,5), b=c("2006", "2006", "2006", "2007", "2007"), d=c(6,7,8,9,10), e=c(11,12,13,14,15))
d3<-data.frame(a=c(1,2,3,4,5), b=c("2006", "2006", "2006", "2007", "2007"), d=c(6,7,8,9,10), e=c(11,12,13,14,15))

mylist <- list(l1=d1, l2=d2, l3=d3)

我想根据列名向量对数据库进行子集化:

subset_colnames <- c("a", "d", "e")

子集数据框应该如下所示:

#Subsetting dataframes based on columns:
d1<-data.frame(a=c(1,2,3,4,5), b=c("2006", "2006", "2006", "2007", "2007"))
d2<-data.frame(d=c(6,7,8,9,10), b=c("2006", "2006", "2006", "2007", "2007"))
d3<-data.frame(e=c(11,12,13,14,15), b=c("2006", "2006", "2006", "2007", "2007"))

mylist_filtered = list(l1=d1, l2=d2, l3=d3)

最后,我想在 subset_columns 中为列表中的每个数据框总结列名称,如下所示:

d1 %>% 
group_by(b) %>%
summarise(mean = mean(a), n = n())

d2 %>%
group_by(b) %>%
summarise(mean = mean(d), n = n())

d3 %>%
group_by(b) %>%
summarise(mean = mean(e), n = n())

我想使用 lapply 来做到这一点,查看了解决方案 herehere但我的操作有点独特,因为我想根据字符向量对列进行子集化

最佳答案

您可以使用 Map,使用自定义函数从列表中获取数据框和从 subset_columns 中获取列名并对其进行汇总;要将字符名称评估为 summarize 中的实际列,请使用 rlang/tidyeval 语法:

library(dplyr); library(rlang);

cust_mean <- function(df, col) {
df %>%
group_by(b) %>%
summarise(mean = mean(!!sym(col)), n = n())
}

Map(cust_mean, mylist, subset_colnames)
#$l1
# A tibble: 2 x 3
# b mean n
# <fctr> <dbl> <int>
#1 2006 2.0 3
#2 2007 4.5 2

#$l2
# A tibble: 2 x 3
# b mean n
# <fctr> <dbl> <int>
#1 2006 7.0 3
#2 2007 9.5 2

#$l3
# A tibble: 2 x 3
# b mean n
# <fctr> <dbl> <int>
#1 2006 12.0 3
#2 2007 14.5 2

关于r - 根据列名向量在列表中按列子集数据帧并汇总列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47213817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com