gpt4 book ai didi

r - 在 R 和 dplyr 中,使用 "mutate"和 "mutate"将多次调用 "across"替换为一次调用

转载 作者:行者123 更新时间:2023-12-05 09:00:43 27 4
gpt4 key购买 nike

我们在 R 中有以下数据框

# Create example dataframe
df <- data.frame(gp = c(0, 1, 0, 1),
col1A = c(1, 2, 3, 4),
col1B = c(5, 6, 7, 8),
col2A = c(11, 12, 13, 14),
col2B = c(15, 16, 17, 18),
col3A = c(11, 12, 13, 14),
col3B = c(15, 16, 17, 18))

我们希望应用以下逻辑:

df %>%
dplyr::mutate(col1A = ifelse(gp == 0, col1B, col1A)) %>%
dplyr::mutate(col2A = ifelse(gp == 0, col2B, col2A)) %>%
dplyr::mutate(col3A = ifelse(gp == 0, col3B, col3A))

但是我们希望替换 3 mutate调用 1 个调用结合了 mutateacross (或其他一些方法)。假设我们在字符串中有这些变量,所以 aVars = c('col1A', 'col2A', 'col3A')bVars = c('col1B', 'col2B', 'col3B') .

是否可以进行这种类型的整合?我们使用了 mutateacross以前在一起,但是当使用两组变量时这样做似乎更困难,就像我们对 A 所做的那样和 B这里的变量...

最佳答案

我们可以使用 cur_column() 并对其进行修改(对于尾随 “B”)以引用每个变量的两个版本。

df %>%
mutate(
across(ends_with("A"),
~ if_else(gp == 0, cur_data()[[sub("A$", "B", cur_column())]], .))
)
# gp col1A col1B col2A col2B col3A col3B
# 1 0 5 5 15 15 15 15
# 2 1 2 6 12 16 12 16
# 3 0 7 7 17 17 17 17
# 4 1 4 8 14 18 14 18

关于r - 在 R 和 dplyr 中,使用 "mutate"和 "mutate"将多次调用 "across"替换为一次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75086029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com