#r #dplyr #across
#r #dplyr #через
Вопрос:
Я пытаюсь сравнить 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 вместе с across для перебора яблок и бананов, но это не удалось… У кого-нибудь есть идея получше?
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
Ответ №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