如何使用ifelse引用R dplyr mutate_at/mutate_if函数中的多个列?

如何使用ifelse引用R dplyr mutate_at/mutate_if函数中的多个列?,r,dplyr,R,Dplyr,我有一个数据集,其中包含来自多个来源的许多列,我希望根据另一列中的条件,使用dplyr中的mutate\u将每组列合并为一列。下面是一个我想要的示例,使用硬编码的列名和dplyr::mutate: library (dplyr) library (tibble) library (magrittr) data <- tribble( ~source, ~stars_1 , ~stars_2 , ~dashes_1 , ~dashes_2 , "1&q

我有一个数据集,其中包含来自多个来源的许多列,我希望根据另一列中的条件,使用
dplyr
中的
mutate\u将每组列合并为一列。下面是一个我想要的示例,使用硬编码的列名和
dplyr::mutate

library (dplyr)
library (tibble)
library (magrittr)

data <- tribble(
  ~source,    ~stars_1  ,  ~stars_2 ,  ~dashes_1  ,  ~dashes_2  , 
  "1"    ,    "*"       ,  "-"      ,  "-"        ,  "#"        , 
  "2"    ,    "+"       ,  "*"      ,  "+"        ,  "-"        , 
  "2"    ,    "+"       ,  "*"      ,  "+"        ,  "-"        
)      

dataClean <- data %>% 
  mutate (stars_1 = ifelse (source == 1, stars_1, stars_2),
          dashes_1 = ifelse (source == 1, dashes_1, dashes_2)) %>% 
  mutate (stars_Check = stars_1 == "*",
          dashes_Check = dashes_1 == "-")

库(dplyr)
图书馆(tibble)
图书馆(magrittr)
数据%
突变(星号检查=星号检查1==“*”,
破折号\u检查=破折号\u 1==“-”)
我试图通过编程来实现这一点,但并没有提供预期的结果

baseColNames <- c("stars", "dashes")

data %>% 
  mutate_at (.cols = paste0(baseColNames, "_1"), 
             .funs = funs(ifelse (source == 1, paste0(., "_1"), paste0(., "_2"))))
baseColNames%
在(.cols=paste0(baseColNames,“_1”)处进行变异,
.funs=funs(ifelse(source==1,paste0(,“_1”),paste0(,“_2”))
我更喜欢在
dplyr
mutate_at
中这样做,以便于他人理解。此外,数据集非常大,因此我不希望
收集
传播
和/或使用
lappy
,根据以前的经验,这可能会实现目标,但会牺牲运行时间

谢谢你的帮助



更新:请参阅。询问相同的问题。

在讨论类似问题时,请勾选此项。所有回答者都认为,可能不可能使用
mutate
的范围变量,但建议使用
tidyr
方法<代码>聚集
分散
将被新的、更高效的
pivot\u长
pivot\u宽
取代。他们可以回答吗?谢谢@RicS,这篇帖子也在问同样的问题。关于如何处理此问题,我将参考该函数,并尝试新版本的
pivot\uu
函数。在讨论类似问题时,请检查此函数。所有回答者都认为,可能不可能使用
mutate
的范围变量,但建议使用
tidyr
方法<代码>聚集和
分散
将被新的、更高效的
pivot\u长
pivot\u宽
取代。他们可以回答吗?谢谢@RicS,这篇帖子也在问同样的问题。关于如何处理这个问题,我将参考这篇文章,并尝试使用新版本的
pivot\
函数。