Заменить определенный столбец "слова" на номер или пробел - PullRequest
5 голосов
/ 10 апреля 2011

Входная таблица

Patients  Hospital   Drug   Response
1         AAA        a      Good
1         AAA        a      Bad
2         BBB        a      Bad
3         CCC        b      Good
4         CCC        c      Bad
5         DDD        e      undefined 

Выходной файл

Patients  Hospital   Drug   Response
1         AAA        a      1
1         AAA        a      -1
2         BBB        a      -1
3         CCC        b      1
4         CCC        c      -1
5         DDD        e       

Как заменить 3 текста в одном столбце на число пустым?

«хорошо в столбце отклика»«1» «плохо в столбце« Ответ »» до «-1» «не определено в столбце« Ответ »до" "

Данные:

structure(list(Patients = c(1L, 1L, 2L, 3L, 4L, 5L), Hospital = structure(c(1L, 
1L, 2L, 3L, 3L, 4L), .Label = c("AAA", "BBB", "CCC", "DDD"), class = "factor"), 
    Drug = structure(c(1L, 1L, 1L, 2L, 3L, 4L), .Label = c("a", 
    "b", "c", "e"), class = "factor"), Response = structure(c(2L, 
    1L, 1L, 2L, 1L, 3L), .Label = c("Bad", "Good", "undefined"
    ), class = "factor")), .Names = c("Patients", "Hospital", 
"Drug", "Response"), class = "data.frame", row.names = c(NA, 
-6L))

Ответы [ 4 ]

17 голосов
/ 10 апреля 2011

Это можно сделать одной строкой, изменив метки коэффициента Response:

> within(df, Response <- factor(Response, labels = c(-1, 1, "")))
  Patients Hospital Drug Response
1        1      AAA    a        1
2        1      AAA    a       -1
3        2      BBB    a       -1
4        3      CCC    b        1
5        4      CCC    c       -1
6        5      DDD    e         
5 голосов
/ 10 апреля 2011

Кэтрин, на твои вопросы все еще можно ответить с помощью очень простого учебника на R. Пожалуйста, см. Комментарий Дирка в твоем предыдущем вопросе .

Ответ

Если d является вашим фреймом данных, то:

d[d$Response == "Good",]$Response = 1
d[d$Response == "Bad",]$Response = -1
d[d$Response == "undefined",]$Response = ""

Я предполагаю (я могу ошибаться), что«Не определено» - отсутствуют данные.В этом случае используйте NA вместо пробела.Любая базовая R книга опишет NA

2 голосов
/ 10 апреля 2011

Вы можете использовать простое выражение ifelse().

cath <- data.frame(nmbrs = runif(10), words = sample(c("good", "bad"), 10, replace = TRUE))
cath$words <- ifelse(cath$words == "good", 1, ifelse(cath$words == "bad", -1, ""))
2 голосов
/ 10 апреля 2011

Если ваши данные находятся во фрейме данных df

df$Response[df$Response == "Good"] <- 1
df$Response[df$Response == "Bad"] <- -1
df$Response[df$Response == "undefined"] <- ""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...