我们在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))

然而,我们希望用结合了mutateacross(或其他方法)的1个调用来取代3 mutate个调用.假设我们在字符串中有这些变量,那么aVars = c('col1A', 'col2A', 'col3A')bVars = c('col1B', 'col2B', 'col3B').

这种类型的整合可能吗?我们以前一起使用过mutateacross,但在使用两组变量时,就像我们在这里使用AB变量一样,似乎更难做到这一点.

推荐答案

我们可以使用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相关问答推荐

在组中添加值增加和减少的行

如何改变x轴比例的列在面

如何用书面利率绘制geom_bar图

是否有新方法来更改Facet_WRAP(Ggplot2)中条文本的文本 colored颜色 ?

将标识符赋给事件序列,避免错误观察

在另一个包中设置断点&S R函数

如何从向量构造一系列双边公式

有没有办法一次粘贴所有列

R预测包如何处理ARIMA(Auto.arima函数)中的缺失值

如何使用ggplot2根据绘图中生成的斜率对小平面进行排序?

如何使投篮在R中保持一致

隐藏基于 case 总数的值

如何计算多个变量的百分比与总和的百分比?

我有2011-2022年的年度数据.如何计算最低年份和最高年份之间的差额?

在R中,有没有什么方法可以根据一列中的多个值来过滤行?

根据单个条件变异多个列

判断R中多个数据帧中的公共ID

对多个不整齐的列使用PIVOT_LONG

R:统计行值在其他行值范围内的实例

使用dplyr在字符矢量中创建多个重复值