我的数据和包使用:

library(dplyr)

data <- data.frame(id = c(1:3, rep(4, 3), 5:6),
                   id1 = c(7:9, 1:3, 10:11),
                   value = 1:8 * 10,
                   value1 = 1:8 * 20,
                   chkvar = c(rep(TRUE, 3), rep(FALSE, 3), rep(TRUE, 2)))

如果chkvar==False,我想用对应的值替换id1和value1中的值,其中id1在id中.我可以通过两个步骤实现这一点:

data %>%
  mutate(value1 = ifelse(chkvar == FALSE,
                         value1[match(id1, id)],
                         value1),
         id1 = ifelse(chkvar == FALSE,
                      id1[match(id1, id)],
                      id1))

  id id1 value value1 chkvar
1  1   7    10     20   TRUE
2  2   8    20     40   TRUE
3  3   9    30     60   TRUE
4  4   7    40     20  FALSE
5  4   8    50     40  FALSE
6  4   9    60     60  FALSE
7  5  10    70    140   TRUE
8  6  11    80    160   TRUE

但是我的整个数据集有更多的列要替换,因此需要一个需要更少代码的解决方案.我试着改编了this answer:

data %>%
  mutate_at(.vars = vars(value1, id1),
            .funs = list(~ifelse(!chkvar, value1[match(id1, id)], .)))

但是,如果!chkvar为真,我不知道如何声明多个列.对我来说,我似乎是一项简单的任务,但也许用ifelse()美元是不可能的?我找到的其他答案涉及使用coalesce(),但我没有遗漏值,或者我不知道如何修改代码.我找到的case_when()个解决方案也需要为每一列单独声明.

推荐答案

你走上了正确的道路.您可以使用across()来 Select 要对其应用转换的多个变量:

library(dplyr)

data |>
  mutate(across(c(value1, id1), ~ if_else(!chkvar, .x[match(id1, id)], .x)))

  id id1 value value1 chkvar
1  1   7    10     20   TRUE
2  2   8    20     40   TRUE
3  3   9    30     60   TRUE
4  4   7    40     20  FALSE
5  4   8    50     40  FALSE
6  4   9    60     60  FALSE
7  5  10    70    140   TRUE
8  6  11    80    160   TRUE

R相关问答推荐

如何使用geom_sf在边界显示两种 colored颜色 ?

如何计算前一行的值,直到达到标准?

我想在R中总结一个巨大的数据框架,使我只需要唯一的lat、lon、Date(Year)和Maxium Value""""""""

如何在geom_col中反转条

删除具有相同标题的tabPanel(shinly)

在R中无法读入具有Readxl和lApply的数据集

在R中使用Scale_y_Break后更改y轴标签

调换行/列并将第一行(原始数据帧的第一列)提升为标题的Tidyr类似功能?

R -基线图-图形周围的阴影区域

如何移动点以使它们的打印不重叠

在ggplot2图表中通过端点连接点

在不重复主题的情况下重新排列组

每行不同列上的行求和

如何在shiny 的应用程序 map 视图宣传单中可视化单点

按两个条件自动过滤数据

希望解析和复制R中特定模式的数据

将每晚的平均值与每晚的值进行比较,统计是否有效?

使用显式二元谓词子集化sfc对象时出错

根据用户输入更改标记大小和 colored颜色 (R)

带有Bootswatch Cerulean主题的shiny 仪表板中的浏览&按钮可见性问题