如何使用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\
函数。