В R, как свернуть категории или повторно категоризировать переменные?

Я уверен, что это - очень простой вопрос:

В R у меня есть 600 000 категориальных переменных - каждый из которых классифицирован как "0", "1", или "2"

То, что я хотел бы сделать, выйти из строя "1" и "2" и уехать "0" отдельно, такой это после перекатегоризации "0" = "0"; "1" = "1" и "2" = "1"---в конце я только хочу "0" и "1" как категории для каждой из переменных.

Кроме того, если возможный я не создал бы 600 000 новых переменных, если бы я могу заменить существующие переменные новыми значениями, которые были бы большими!

Каков был бы лучший способ сделать это?

Спасибо!

6
задан CCA 16 July 2010 в 17:13
поделиться

2 ответа

В пакете 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)
4
ответ дан 8 December 2019 в 04:07
поделиться

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))
10
ответ дан 8 December 2019 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: