【问题标题】:Call the column of a data frame by position using group_by function in R使用 R 中的 group_by 函数按位置调用数据框的列
【发布时间】:2021-08-12 05:50:06
【问题描述】:

我想计算每年流量数据的每月平均值。为此,我正在使用函数 group_bysummarize

这是我的输入:

这是我的代码:

x[[1]] %>% group_by(year, month) %>% summarize(mean.value = mean(x[[1]][[2]]))

我相信我的问题是当我使用 mean 函数计算数据框第二列 (DailyPrec) 的平均值时。

我得到的输出是:

当我使用列名时:

x[[1]] %>% group_by(year, month) %>% summarize(mean.value = mean(DailyPrec))

它有效,我得到了输出:

但是,我不想指明列名,我想指的是列位置,在这种情况下,是第二列。

如何在不使用列名的情况下调用数据框的第二列?

【问题讨论】:

    标签: r list dataframe time dplyr


    【解决方案1】:

    我们可以使用几个选项,即获取具有相应索引的数据的 names,转换为 symbol 并评估 (!!)

    library(dplyr)
    x[[1]] %>%
        group_by(year, month) %>% 
        summarize(mean.value = mean(!! rlang::sym(names(x[[1]])[2])))
    

    或者另一个选项是across,它可以采用索引或列名(带引号或不带引号)。

    x[[1]] %>%
        group_by(year, month) %>% 
        summarize(across(all_of(names(x[[1]])[2]), mean, na.rm = TRUE))
    

    另外,上面的代码似乎使用了一个序列来循环list。相反,我们可以使用lapply/map 循环遍历list 的每个元素,即

    library(purrr)
    map(x, ~ .x %>%
              group_by(year, month) %>%
              summarise(across(2, mean, na.rm = TRUE)))
    

    mean 中调用x[[1]][[2]] 的问题在于,它提取了打破先前创建的group_by 属性的整个列,因此OP 为每个组(即@987654335)获得了与mean 相同的值整个数据的@

    【讨论】:

      猜你喜欢
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 2022-06-19
      相关资源
      最近更新 更多