【问题标题】:R transforms column to NA value - why?R 将列转换为 NA 值 - 为什么?
【发布时间】:2014-09-04 07:40:22
【问题描述】:

我想读取制表符分隔的文件,其中一列指示由“罗马”枚举表示的类(每个文件在第二列中包含 i、ii、iii 或 iv)。但是,对于仅包含“i”的文件,此列将转换为 NA 值。我可以使用如下所示的小测试文件重现此错误:

animal  class   info
dog i   a
cat i   a
rabbit  i   b

当我将它读入 R 时:

> d<-read.delim("test_roman.csv", sep="\t")
> d
  animal class info
1    dog    NA    a
2    cat    NA    a
3 rabbit    NA    b

我在这里缺少什么? read.delim 总是为我处理类似的文件。

【问题讨论】:

  • 我编辑了问题以使这一点更清楚。我有不同的文件,每个文件只包含 iìi...它们被加载到 R 中然后合并。

标签: r file-io na csv


【解决方案1】:

如果你已经可视化了类型,你可能会发现:

typeof(d$class)
[1] "complex"

你显然不想有一个复数,所以我们强制执行“字符”类:

read.table("test_roman.csv", sep="\t", fill=T, colClasses="character", header=T)
# animal  class   info
# dog     i       a
# cat     i       a
# rabbit  i       b

如果您的文件不仅包含 i,还包含 iiiv,那么它仍然有效:

read.delim("test_roman2.csv", sep="\t")
#   animal class info
#1     dog     i    a
#2     cat     i    a
#3 rabbit      i    b
#4 rabbit     iv    b
#5 rabbit     ii    b

【讨论】:

  • 我也是这么想的,但是如果“类”列中还有其他值,那该列不应该自动检测为字符或因子吗?
  • @AnandaMahto 是的,确实,然后它可以工作,如我的更新所示。
  • 没想到!我在寻找\ti 中是否隐藏了转义序列。非常感谢!但是还有一个问题:如果我有一个数字第 4 列要用于计算,我该怎么办?它现在也将成为一个角色。我必须在读取后对其进行转换还是有更简单的解决方案?
  • @aldorado 然后使用colClasses=c(rep("character",3), "numeric")。然后我会使用你的数据集的完整规范。
  • 关于最小示例:不同的制表符分隔文件在加载到 R 中并组合之前创建。所以可能会发生错误。
猜你喜欢
  • 2022-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多