Условно объединить слова из отдельных столбцов во фрейме данных - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть датафрейм с 3 столбцами, каждый из которых является символом.Я хочу использовать этот фрейм данных для создания формул, поэтому мне нужно убедиться, что фрейм данных отформатирован, чтобы я мог вставить их в уравнения.

1-й столбец содержит статистические функции (например, 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)

Я подумал, основываясь на похожих вопросах, таких как Как использовать цепочку ifelse и grepl? , что мне нужно что-то вроде этого:

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

Но это не работает для типа модели «Нет», а также не заключает скобки вокруг исходной строки переменной.Вот что я хотел бы получить на выходе.

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

Заранее благодарю за любую помощь в этом.

1 Ответ

0 голосов
/ 07 декабря 2018

Вы можете вставить переменные вместе, используя 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
...