2015-01-07 2 views
0

У меня есть функция в R, чтобы превратить факторы в цифровой:R Применить функцию на колоннах рамных данных

as.numeric.factor <- function(x) {as.numeric(levels(x))[x]} 

и у меня есть dataframe, который состоит из двух факторов, числовых и других типов данных. Я хочу применить вышеперечисленные функции сразу на весь фрейм данных, чтобы превратить все факторы в столбцы числовых типов. Любая идея? спасибо

ответ

0

Один из вариантов:

dat[] <- lapply(dat, function(x) if(is.factor(x)) as.numeric(levels(x))[x] else x) 
0

Вы можете проверить, является ли столбец factor или нет на is.factor и sapply. Используйте это как индекс, чтобы отфильтровать эти столбцы и преобразовать столбцы в числовые значения as.numeric.factor в цикле lapply.

indx <- sapply(dat, is.factor) 
dat[indx] <- lapply(dat[indx], as.numeric.factor) 

Можно также применить функцию без Подменю (но применять его на подмножестве будет быстрее)

Чтобы предотвратить столбцы должны быть преобразованы в «фактор», можно указать stringsAsFactors=FALSE аргумент или colClasses аргумент в пределах read.table/read.csv Я бы предположил, что столбцы имеют по крайней мере один нечисловой компонент, который автоматически преобразует это значение в factor при чтении набора данных.

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