gpt4 book ai didi

r - dplyr:使用列表的对象名称创建列

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

我有两个数据框,df1_09df1_10,我将它们放在一个列表中,list_of_df:

library(tidyverse)

df1_09 <- data.frame(
index = c(1, 1, 2, 2),
first_column = c(1, 2, 3, 4),
second_column = c(5, 6, 7, 8)
)

df1_10 <- data.frame(
index = c(1, 1, 2, 2),
first_column = c(4, 2, 3, 1),
second_column = c(8, 6, 7, 5)
)

list_of_df <- list(df1_09, df1_10)

现在我创建了一个函数,它接收原始数据帧之一 df1_09,根据 index 变量对值进行分组,并计算每列的均值.该函数还创建了一个名为 type 的附加列,其中包含数据框的名称。

output_mean <- function(subset, name) {
subset %>%
group_by(index) %>%
summarize(across(c(first_column, second_column), ~ mean(.x, na.rm = TRUE))) %>%
mutate(type = name) %>%
print()
}

output_mean(df1_09, "df1_09")
#> # A tibble: 2 x 4
#> index first_column second_column type
#> <dbl> <dbl> <dbl> <chr>
#> 1 1 1.5 5.5 df1_09
#> 2 2 3.5 7.5 df1_09

现在我想做的是循环列表 list_of_df 并获得相同的结果。我尝试了以下方法:

for (i in list_of_df) {
output_mean(i, "i")
}
#> # A tibble: 2 x 4
#> index first_column second_column type
#> <dbl> <dbl> <dbl> <chr>
#> 1 1 1.5 5.5 i
#> 2 2 3.5 7.5 i
#> # A tibble: 2 x 4
#> index first_column second_column type
#> <dbl> <dbl> <dbl> <chr>
#> 1 1 3 7 i
#> 2 2 2 6 i

问题是我不知道如何获取列表中每个对象的名称。名称是否随着列表的创建而被删除?

reprex package 创建于 2021-05-02 (v2.0.0)

最佳答案

我们可以创建一个命名的list,遍历listnames,提取list元素使用 [[ 同时将名称参数作为 i

list_of_df <- dplyr::lst(df1_09, df1_10)
for (i in names(list_of_df)) {
output_mean(list_of_df[[i]], i)
}

-输出

# A tibble: 2 x 4
# index first_column second_column type
#* <dbl> <dbl> <dbl> <chr>
#1 1 1.5 5.5 df1_09
#2 2 3.5 7.5 df1_09
# A tibble: 2 x 4
# index first_column second_column type
#* <dbl> <dbl> <dbl> <chr>
#1 1 3 7 df1_10
#2 2 2 6 df1_10

关于r - dplyr:使用列表的对象名称创建列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67360326/

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