动态改变数据框列表中列的向量
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])
我有一个数据帧列表。我想改变所有数据帧的第 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])