Я уверен, что это - очень простой вопрос:
В R у меня есть 600 000 категориальных переменных - каждый из которых классифицирован как "0", "1", или "2"
То, что я хотел бы сделать, выйти из строя "1" и "2" и уехать "0" отдельно, такой это после перекатегоризации "0" = "0"; "1" = "1" и "2" = "1"---в конце я только хочу "0" и "1" как категории для каждой из переменных.
Кроме того, если возможный я не создал бы 600 000 новых переменных, если бы я могу заменить существующие переменные новыми значениями, которые были бы большими!
Каков был бы лучший способ сделать это?
Спасибо!
В пакете car
(Companion to Applied Regression):
require("car")
recode(x, "c('1','2')='1'; else='0'")
или для вашего случая в простом R:
> x <- factor(sample(c("0","1","2"), 10, replace=TRUE))
> x
[1] 1 1 1 0 1 0 2 0 1 0
Levels: 0 1 2
> factor(pmin(as.numeric(x), 2), labels=c("0","1"))
[1] 1 1 1 0 1 0 1 0 1 0
Levels: 0 1
есть функция recode
. ] Обновление: Чтобы перекодировать все категориальные столбцы фрейма данных tmp
, вы можете использовать следующее
recode_fun <- function(x) factor(pmin(as.numeric(x), 2), labels=c("0","1"))
require("plyr")
catcolwise(recode_fun)(tmp)
recode () для этого немного излишне. Ваш случай зависит от того, как он сейчас закодирован. Допустим, ваша переменная x.
Если это числовое значение
x <- ifelse(x>1, 1, x)
, если это символ
x <- ifelse(x=='2', '1', x)
, если это коэффициент с уровнями 0,1,2
levels(x) <- c(0,1,1)
Любой из них может применяться в кадре данных dta к переменной x на месте. Например ...
dta$x <- ifelse(dta$x > 1, 1, dta$x)
Или несколько столбцов кадра
df[,c('col1','col2'] <- sapply(df[,c('col1','col2'], FUN = function(x) ifelse(x==0, x, 1))