有条件地组合来自数据框中不同列的单词

Conditionally combine words from separate columns in a data frame

我有一个包含 3 列的数据框,所有列都是字符。我想使用此数据框来创建公式,因此我需要确保数据框已格式化,以便我可以将它们粘贴到方程式中。

第一列包含统计函数(例如 log10、exp)。第二个包含一个解释变量。第 3 列包含有关模型类型的信息,这应该用于定义是否应应用以下功能。

我想编辑第 2 列,以便将第 1 列中的字母放在字符串的前面。但我希望第二列中的文本带有括号。我只想将此功能应用于第 3 列中包含特定单词的某些模型。所以一些示例数据:

Function <- c("exp","log10","exp")
Variable <- c("x","y","z")
Model_type <- c("Model_Yes","Model_Yes","Model_No")
Test <- data.frame(Function,Variable,Model_type)
Test[, ] <- lapply(Test[, ], as.character)

我认为基于 等类似问题,我需要这样的东西:

Test$Variable <- ifelse((grepl("No", Test$Model_type)),
                    Test$Variable,
                    paste(Test$Function,Test$Variable))

但这对 'No' Model_types 不起作用,也不会在原始变量字符串周围放置方括号。这是我想要的输出。

Test$Variable <- c("exp(x)","log10(y)","z")

预先感谢您对此提供的任何帮助。

您可以使用 paste0 并添加滞后和前导括号

将变量粘贴在一起
paste0(Test$Function, "(", Test$Variable, ")")   
#[1] "exp(x)"   "log10(y)" "exp(z)"  

所以,最后的命令是

Test$Variable <- with(Test, ifelse(grepl("No", Model_type),
                      as.character(Variable), paste0(Function, "(", Variable, ")")))

Test
#  Function Variable Model_type
#1      exp   exp(x)  Model_Yes
#2    log10 log10(y)  Model_Yes
#3      exp        z   Model_No