【问题标题】:Use column names in functions from mutate(across()) in R在 R 中的 mutate(across()) 函数中使用列名
【发布时间】:2021-03-01 06:44:50
【问题描述】:

我正在尝试将 col 与我的数据中的 col_new 进行比较,并创建一个名为 change_col 的新布尔标识符来标识更改。

下面是一个例子:

input <- data.frame(
  apple = c(1,2)
  ,apple_new = c(2,3)
  ,banana = c(1,2)
  ,banana_new = c(1,3)
)

desired_output <- data.frame(
  apple = c(1,2)
  ,apple_new = c(2,3)
  ,change_apple = c(TRUE,TRUE)
  ,banana = c(1,2)
  ,banana_new = c(1,3)
  ,change_banana = c(FALSE,TRUE)
)

我正在考虑使用 mutate 和 cross 来循环苹果和香蕉,但有点失败......谁有更好的主意?

library(dplyr)

var_to_consider <- c('apple','banana')

input %>%
  mutate( across(c(var_to_consider), 
                 .fns = list(change = ~ . != !!sym(paste0(.,'_new') )),
                 .names = "{fn}_{col}" ) )

以上将导致以下错误:

Error: Only strings can be converted to symbols

【问题讨论】:

    标签: r dplyr across


    【解决方案1】:

    这可以通过直接比较来完成。

    var <- c('apple','banana')
    input[paste0('change_', var)] <- input[var] != input[paste0(var, '_new')]
    
    #  apple apple_new banana banana_new change_apple change_banana
    #1     1         2      1          1         TRUE         FALSE
    #2     2         3      2          3         TRUE          TRUE
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 1970-01-01
      • 2022-12-03
      • 2021-10-16
      • 2022-01-01
      • 2021-08-30
      • 2022-08-23
      相关资源
      最近更新 更多