假设我有这个示例数据:
library(tidyverse)
colNames <- c('A', 'B')
df <- tibble(A = sample(1:1000, 20),
A_Direction = 'Decreasing',
B = sample(1:1000, 20),
B_Direction = 'Increasing')
我想更改列
A
和B
,这样如果A_Direction
或B_Direction
减少,则为0,如果增加,则为1。这是我尝试过的:
dfNew <- df %>%
mutate(across(.cols = matches(paste0('^', colNames, '$')),
.fns = ~ifelse(test = paste0(cur_column(), '_Direction')=='Decreasing',
yes = 0,
no = 1)))
但是,当然,它无法识别
test
参数,因为它是一个字符串,因此两列都变成 1
。我有什么想法可以通过编程来完成这个任务(OG 数据有很多很多这样的列)。
非常感谢!
如果您已经拥有
colNames
,您可以这样做:
library(dplyr)
library(stringr)
lookup <- setNames(str_c(colNames, "_", "Direction"), colNames)
df |>
mutate(across(all_of(colNames), \(x) as.numeric(pick(all_of(lookup[[cur_column()]]))[[1]] == "Increasing")))