Как читать числовые значения как факторы в R?


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

zip code
00601
00602
00607

И так далее.

Если я прочитаю это в R, используя read.csv, они читаются как числовые сущности. Я хочу, чтобы они были факторами.

Я попытался преобразовать их обратно в фактор, используя

A <- as.factor(A)

Но это удаляет начальные нули и делает подобное

zip code
601
602
607

Я этого не хочу. Я хочу сохранить нули.

3 2

3 ответа:

Используйте colClasses в своем вызове read.csv, Чтобы прочитать их как символ или Фактор: read.csv(*, colClasses="factor").

Возможно, вам потребуется добавить ведущие нули - как в этом посте. Это сначала преобразуется в класс символов. Затем вы можете изменить его на коэффициент, который поддерживает ведущие нули.

Пример

A <- data.frame("zip code"=c(00601,00602,00607))
class(A$zip.code) #numeric
A$zip.code <- sprintf("%05d", A$zip.code)
class(A$zip.code) #character
A$zip.code <- as.factor(A$zip.code)
class(A$zip.code) #factor

В результате чего:

> A$zip.code
[1] 00601 00602 00607
Levels: 00601 00602 00607

Написание A как a .csv-файл

write.csv(A, "tmp.csv")

Приводит к

"","zip.code"
"1","00601"
"2","00602"
"3","00607"

Все без какого-либо текстового квалификатора (попытано быть) прочитано как числовое, поэтому проблема в основном заключается в том, чтобы знать, как ваши данные (в случае 00607) хранятся в плоском текстовом файле. Если без текстового классификатора, вы можете либо следовать предложению @Hong Ooi, либо использовать

read.csv(*, colClasses="character")

, а затем преобразовать каждый столбец соответственно (в случае, если вы не хотите/нуждаетесь во всех из них в factor). После того, как у вас есть вектор символов (данные.frame column) преобразование его в фактор просто прямо

> zipCode <- c("00601", "00602", "00607")
> factor(zipCode)
[1] 00601 00602 00607
Levels: 00601 00602 00607