r - 如何引用循环 R 中列的位置

标签 r

我在这种情况下遇到了问题:

我有三个数据框,就像这样:

    df1 = data.frame(A = c(1,2,2),
                 B = c(5,4,3))

df2 = data.frame(C = c(1,2,2),
                 D = c(5,4,3))

df3 = data.frame(E = c(1,2,2),
                 'F' = c(5,4,3))

我想使用我创建的变量列表将它们传递给循环:

df_names <- paste0("df", 1:3)
df_all <- mget(var_names, envir = globalenv())

但是列名称不同,这意味着我无法获取第一列和第二列的平均值!

我需要的是这样的:

for(i in 1:3){

df_mean[i] <- df_all[[i]] %>%
  mutate(mean_first_column = mean (A (or C or E)),
         mean_second_column = mean(B, D or F))


}

谢谢!

最佳答案

考虑使用colMeansacross

library(dplyr)
df_mean <- vector('list', length(df_all))
for(i in seq_along(df_all)) 
    df_mean[[i]] <- df_all[[i]] %>%
          summarise(across(everything(), mean))

-输出

df_mean
[[1]]
         A B
1 1.666667 4

[[2]]
         C D
1 1.666667 4

[[3]]
         E F
1 1.666667 4

如果我们需要指定位置,则可以使用 .cur_data().data 的子集(使用分组属性, cur_data().data 应该更合适

df_mean <- vector('list', length(df_all))
for(i in seq_along(df_all)) 
     df_mean[[i]] <- df_all[[i]] %>%
      mutate(mean_first_column = mean(cur_data()[[1]]),
            mean_second_column = mean(cur_data()[[2]]))

-输出

df_mean
[[1]]
  A B mean_first_column mean_second_column
1 1 5          1.666667                  4
2 2 4          1.666667                  4
3 2 3          1.666667                  4

[[2]]
  C D mean_first_column mean_second_column
1 1 5          1.666667                  4
2 2 4          1.666667                  4
3 2 3          1.666667                  4

[[3]]
  E F mean_first_column mean_second_column
1 1 5          1.666667                  4
2 2 4          1.666667                  4
3 2 3          1.666667                  4

注意:mutate 返回整个数据以及创建的列。由于 mean 是单个值,因此使用 summarise

可能会更好

base R中,我们可以使用lapply循环遍历list并应用colMeans

lapply(df_all, colMeans)

或者如果我们想使用 tidyverse 语法`

library(purrr)
map(df_all, ~ .x %>%
               summarise(across(everything(), mean))

关于r - 如何引用循环 R 中列的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68186214/

相关文章:

r - 从 R 中的文本中提取关键字

R `parse()` 下标混合数字和字母

R 脚本 - nls 函数

r - 导入和读取多个文件 R

r - 如何在ggplot2图例中包含黄土线?

mysql - 是否可以将 arules 包与 MySQL 数据库一起使用?

r - Quantmod R 中带有 csv 的 getSymbols

RODBC:为什么 sqlQuery() 中的空值和仅空格值的值为 "NA"?

r - 将元素添加到 R 中的调用对象

r - terra::distance 仅报告到 NA 栅格单元的距离