Как изменить форму на основе «проверено» против «не проверено» - PullRequest
0 голосов
/ 24 мая 2018

У меня есть набор данных, который включает в себя данные, структурированные примерно так:

ID       | Treatment=Induction Chemo | Treatment=Hypomethylating Chemo | Treatment=Consolidation Chemo
Patient1           Checked                       Unchecked                Unchecked
Patient2           Unchecked                     Checked                  Unchecked
Patient3           Unchecked                     Unchecked                Checked

Как бы мне было отформатировать эти данные, чтобы они выглядели так?

ID          Treatment
Patient1  Induction Chemo     
Patient2  Hypomethylating Chemo        
Patient3  Consolidation Chemo       

IВы хотели бы автоматизировать это с помощью R, это вообще возможно?Я не уверен, имеет ли пакет изменения формы эти возможности.Если ничего не помогает, я хочу вручную отредактировать заголовки, чтобы удалить «Treatment =» из каждого, но я бы предпочел сделать все это автоматически.Спасибо!

1 Ответ

0 голосов
/ 24 мая 2018

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

Предполагая, что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...