2016-01-07 6 views
-4
x1 <- c("agree","disagree","agree","agree","agree","disagree","disagree") 

Как заменить agree=1 и disagree=0 для больших атомных векторов или конкретных строк/столбцов в кадре данных?Найти и заменить в R для категориальных переменных

+2

Некоторые дубликаты, чтобы вы начали: [дублировать 1] (http://stackoverflow.com/q/3905038/903061), [дублировать 2] (http://stackoverflow.com/q/29562455/ 903061), [duplicate 3] (http://stackoverflow.com/q/17717864/903061), также см. '? Replace' или'? Factor'. – Gregor

ответ

4

Вы можете сделать что-то вроде этого

ifelse(x1 == 'agree', 1, 0) 

Дополнительные условия могут быть добавлены по мере необходимости.

+1

Хотя это работает (и это мой предпочтительный вариант в этом простом случае), добавление дополнительных опций на самом деле довольно хлопот; это решение, таким образом, не очень хорошо масштабируется за пределами двух значений. 'switch' облегчает это, но лишь несколько, так как функция ограничена очень конкретным вводом. Более общим решением в R является использование факторов. –

+0

Да, as.factor() - правильный способ обработки категориальных данных. Но вопрос был очень конкретным. – Gopala

4

Мы можем использовать + для преобразования логической двоичной

+(x1=="agree") 

Или с помощью as.integer (согласно комментариям)

as.integer(x1 == "agree") 

Этот метод намного быстрее, чем ifelse.

set.seed(24) 
x2 <- sample(c("agree", "disagree"), 1e7, replace=TRUE) 
system.time(+(x2=="agree")) 
# user system elapsed 
# 0.32 0.06 0.40 
system.time(ifelse(x2=="agree", 1,0)) 
# user system elapsed 
# 3.20 0.91 4.10 
+0

Мне нужно привыкнуть к началу заявления с помощью +. :) – Gopala

+4

@ user3949008 - Нет, ты действительно не должен. 'as.integer()' более подходит. –

+6

«Не нужно», конечно. Но нет необходимости в вашем решении, которое, в конце концов, намного менее явное и, следовательно, менее читаемое, и полагается на чисто случайное преобразование типа для достижения желаемого эффекта. Другими словами, слишком «умный». Я ** действительно ** препятствую этому решению. Знайте об этом, если хотите. Просто никогда не используйте его. –

Смежные вопросы