【问题标题】:Dynamically mutate vector of columns in a list of dataframes动态变异数据框列表中的列向量
【发布时间】:2021-05-21 03:50:32
【问题描述】:

我有一个数据框列表。我想改变所有数据帧的 2 和 3 列,使得每列 = column*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))


【问题讨论】:

    标签: r dplyr purrr


    【解决方案1】:

    使用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】:

      您可以使用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})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 2018-07-25
        • 1970-01-01
        • 1970-01-01
        • 2016-04-04
        • 1970-01-01
        相关资源
        最近更新 更多