перекодирование символьных переменных - PullRequest
1 голос
/ 27 марта 2011

Я пытаюсь перекодировать символьную переменную в числовое значение.

Символьная переменная выглядит следующим образом:

b <- c("Your category choice is correct", "Your category choice is incorrect", ...

Я пробовал следующее:

b_recoded <- ifelse(b = "Your category choice is correct",  
c(1), c(0))

Я получаю следующую ошибку:

неиспользуемый аргумент (ы) (b = "Ваш выбор категории правильный")

Как я могу заставить это работать?Я пытаюсь кодировать "Your category choice is correct" как 1 и "Your category choice is incorrect" как 0.

Извините за основной вопрос.Я все еще учусь.

Ответы [ 3 ]

2 голосов
/ 27 марта 2011

Если ваша переменная является символьной, вы можете использовать регулярные выражения для сопоставления значений:

p <- "Your category choice is"
s <- sample(c("correct", "incorrect"), 100, replace = TRUE)
b <- paste(p, s)
( foo <- ifelse(grepl(" correct$", b), 1, ifelse(grepl(" incorrect$", b), 0, NA)) )
  [1] 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 1 1 0 1 0 1 1 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0
 [38] 1 1 1 1 0 0 1 0 0 0 0 1 1 0 1 0 0 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 0 0 0 1 1
 [75] 1 0 0 0 1 0 0 0 0 1 1 0 1 1 0 1 0 1 1 0 0 0 1 1 1 0
1 голос
/ 27 марта 2011

Проблема в вашем выражении ifelse заключается в том, что вы используете один знак равенства для логического выражения. = используется для назначения левого верхнего уровня в R. При вызове функции это означает, что вы присваиваете аргумент b "Your category choice is correct".

Чтобы получить логическое выражение, вам нужно использовать два знака равенства ==. Следующий код работает (используя данные mropas):

b <- c(rep("Your category choice is correct", 3),
        rep("Your category choice is incorrect", 5),
        rep("Your category choice is correct", 2))

b_recoded <- ifelse(b == "Your category choice is correct",  1, 0)

Также обратите внимание, что я опустил функции c(), так как вам не нужно объединять отдельные элементы.

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

http://cran.r -project.org / DOC / вно / Paradis-rdebuts_en.pdf

0 голосов
/ 27 марта 2011

данные:

df <- c(rep("Your category choice is correct", 3),
        rep("Your category choice is incorrect", 5),
        rep("Your category choice is correct", 2))

Это изменит ваш df на factor

df2 <- factor(df, labels = c(1,0))   

В начале обработка факторов может стать немного запутанной. Так что, если вы предпочитаете оставить его как класс numeric или integer, вы можете, например, делать

df3 <- df
df3[df3 == "Your category choice is correct"] <- 1
df3[df3 == "Your category choice is incorrect"] <- 0
df3 <- as.integer(df3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...