动态改变数据框列表中列的向量

Dynamically mutate vector of columns in a list of dataframes

我有一个数据帧列表。我想改变所有数据帧的第 2 列和第 3 列,使每列 = 列 * 3。但我希望列的名称相同(动态创建)。这里的列名在每个数据框中都不同。因此,例如,我希望所有数据帧的第 2 列乘以 3,同时保留相同的名称。第 3 列也是如此。

所以第一个数据帧应该是 z=z2, J= j2 对于第二个数据帧 k= k2,x=x2 等等

我想传递列索引,因为名称可能不固定。

df_function <- function(n) {
  df <- data.frame(A = sample(n), runif(n), runif(n), rbinom(n, 2, .2))
  names(df)[-1] <- sample(LETTERS[-1], 3)
  return(df)
}

set.seed(123)
df_list1 <- 1:5 %>% map(., ~ df_function(5))


您可以使用 across 指定要乘以数字的列。

library(dplyr)
library(purrr)

df_list1 <- map(df_list1, ~.x %>% mutate(across(2:3, ~.x * 2)))

或以 R 为基数 -

df_list1 <- lapply(df_list1, function(x) {x[2:3] <- x[2:3] * 2;x})

使用 data.table(在 R 4.1.0 中)

library(data.table)
lapply(df_list1, \(x) as.data.table(x)[, (2:3) := .SD * 2, .SDcols = 2:3])