如何读取数值作为R中的因子?

时间:2013-06-28 08:53:37

标签: r csv r-factor

我有一个数据框A,其数字列如下:

zip code
00601
00602
00607

等等。

如果我使用read.csv在R中读取它,它们将被读作数字实体。我希望它们成为因素。

我尝试使用

将它们转换回因子
A <- as.factor(A)

但是这会删除起始零并使A像

zip code
601
602
607

我不想要这个。我想保存零。

3 个答案:

答案 0 :(得分:4)

colClasses来电中使用read.csv将其作为字符或因素阅读:read.csv(*, colClasses="factor")

答案 1 :(得分:1)

您可能需要添加前导零 - 如this post中所示。这首先转换为字符类。然后,您可以将其更改为保持前导零的因子。

实施例

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写为.csv文件

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

结果

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

答案 2 :(得分:0)

没有任何文本限定符的所有内容都是(尝试)读取为数字,因此问题基本上是知道您的数据(如果00607)存储在平面文本文件中的方式。如果没有文本限定符,您可以按照@Hong Ooi的建议或使用

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

然后相应地转换每个列(如果您不想要/需要所有列到factor)。一旦你有了一个字符向量(data.frame列),将它转换为factor只是简单的

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