Вы можете попробовать это, однако, в качестве предостережения, я предполагаю, что у вас нет повторяющихся значений, отмеченных в определенном столбце.Если это так, то это должно работать.
Предполагая, что df - ваш ввод data.frame.
df1 <- df
df1$Final_col <- do.call("paste0",data.frame(sapply(names(df), function(x)ifelse(df[,x] == "Checked", gsub("Treatment=","",x), '')), stringsAsFactors=F))
Логика :
Использование ifelse
в sapply
с условием == «Проверено» во всех столбцах df, затем заменяется «Обработка =» в именах с использованием gsub
, в этих столбцах ничего не указывается, так что значение после («Обработка =»)) останется только в том случае, если текст может быть получен везде, где есть успешное значение ifelse
как ИСТИНА, мы заменим эти значения полученным значением на gsub
.Наконец, добавив все результаты, используя функцию вставки do.call
, чтобы получить только один столбец.
Данные :
df <- structure(list(ID = c("Patient1", "Patient2", "Patient3"), `Treatment=Induction Chemo` = c("Checked",
"Unchecked", "Unchecked"), `Treatment=Hypomethylating Chemo` = c("Unchecked",
"Checked", "Unchecked"), `Treatment=Consolidation Chemo` = c("Unchecked",
"Unchecked", "Checked")), .Names = c("ID", "Treatment=Induction Chemo",
"Treatment=Hypomethylating Chemo", "Treatment=Consolidation Chemo"
), class = "data.frame", row.names = c(NA, -3L))
Вывод:
Вы можете проверить Final_col
в выводе ответа, вы можете удалить другие столбцы, я сохранил их, чтобы вы могли сравнивать ввод и вывод.
> df1
ID Treatment=Induction Chemo Treatment=Hypomethylating Chemo
1 Patient1 Checked Unchecked
2 Patient2 Unchecked Checked
3 Patient3 Unchecked Unchecked
Treatment=Consolidation Chemo Final_col
1 Unchecked Induction Chemo
2 Unchecked Hypomethylating Chemo
3 Checked Consolidation Chemo