【问题标题】:How to read numeric values as factors in R?如何读取数值作为 R 中的因子?
【发布时间】:2013-06-28 08:53:36
【问题描述】:

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

zip code
00601
00602
00607

等等。

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

我尝试使用

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

但这会删除起始零并使 A 喜欢

zip code
601
602
607

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

【问题讨论】:

  • 你确定它们是数字吗?
  • @Thomas 如果将R 存储为00607 他们肯定不是。这很奇怪,因为 OP 说 they are read as numericI have a data frame A which has numeric column like: zip code 00601 ...

标签: r csv r-factor


【解决方案1】:

在您的read.csv 调用中使用colClasses 将它们作为字符或因子读入:read.csv(*, colClasses="factor")

【讨论】:

    【解决方案2】:

    您可能需要添加前导零 - 如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"
    

    【讨论】:

    • 嗨,Marc,感谢您提供替代解决方案。我开始了解很多功能。只是一个疑问,如果我使用 write.csv() 编写此数据框,则 zip.code 被视为数字向量(它会在开始时自动删除零,无论 zip 是 R 控制台中的因子还是字符)。我如何按原样编写它(意味着开始时为零)??
    • @AyushRajSingh - 就我而言,当我编写一个 .csv 文件时,zip.code 被视为文本。我在答案中添加了我的输出。
    • 我尝试了您的相同示例,但是当我编写它时,零正在消失。可能是什么问题? “写它”:我的意思是,当我使用 write.csv() 后在 Excel 中打开它时。
    • 好的,这是一个 Excel 问题。在 Excel 中,邮政编码实际上有一种格式:高亮列 > 格式化单元格 > 特殊 > 邮政编码
    • 很棒的人。非常感谢。
    【解决方案3】:

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

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

    然后相应地转换每一列(如果您不想要/不需要它们全部转换为factor)。一旦有了字符向量(data.frame 列),将其转换为因子就很简单了

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 2015-09-23
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      相关资源
      最近更新 更多