【问题标题】:Numeric variables converted to factors when reading a CSV file读取 CSV 文件时将数值变量转换为因子
【发布时间】:2013-11-19 00:18:02
【问题描述】:

我正在尝试将 .csv 文件读入 R,其中所有列都是数字。但是,每次我导入它们时,它们都会转换为因子。

这是我的 CSV 的样例:

这是我的代码:

options(StringsAsFactors=F)
data<-read.csv("in.csv", dec = ",", sep = ";")

如您所见,我将dec 设置为, 并将sep 设置为;。尽管如此,所有应该是数字的向量都是因数!

谁能给我一些建议?谢谢!

【问题讨论】:

  • 你试过data &lt;- read.csv("in.csv",dec=",",sep=";", stringsAsFactors=FALSE)吗?
  • ialm 建议的内容应该可行。或者,您可以尝试read.csv("in.csv",dec=",",sep=";",colClasses=rep("numeric", numberofcolumns)),您需要在其中提供列数。
  • 我怀疑问题是由那些N/A 单元格引起的,所以data&lt;-read.csv("in.csv",dec=",",sep=";", na.strings="N/A") 可能会解决它。

标签: r csv read.table


【解决方案1】:

您在 csv 文件 N/A 中的 NA 字符串被解释为 character,然后整个列被转换为 character。如果您在optionsread.csv(默认)中有stringsAsFactors = TRUE,则该列将进一步转换为factor。您可以使用参数na.strings 告诉read.csv 哪些字符串应该被解释为NA

一个小例子:

df <- read.csv(text = "x;y
                 N/A;2,2
                 3,3;4,4", dec = ",", sep = ";")
str(df)

df <- read.csv(text = "x;y
                 N/A;2,2
                 3,3;4,4", dec = ",", sep = ";", na.strings = "N/A")
str(df)

更新以下评论

虽然从提供的示例数据中看不出来,但与数字连接的“$”实例也存在问题,例如“3,3 美元”。这样的值将被解释为character,然后dec = "," 对我们没有帮助。在将变量转换为数字之前,我们需要同时替换“$”和“,”。

df <- read.csv(text = "x;y;z
               N/A;1,1;2,2$
               $3,3;5,5;4,4", dec = ",", sep = ";", na.strings = "N/A")
df
str(df)

df[] <- lapply(df, function(x){
  x2 <- gsub(pattern = "$", replacement = "", x = x, fixed = TRUE)
  x3 <- gsub(pattern = ",", replacement = ".", x = x2, fixed = TRUE)
  as.numeric(x3)
  }
                         )
df
str(df)

【讨论】:

  • 好的,现在大多数向量的问题已经解决了。但是,由于某些数字上附加了字符“$”,仍然有一些向量被转换为因子。有什么想法吗?
  • 这……很有趣。 “小例子”中的两个调用对我来说都导致了相同的结果。在这两种情况下,N/A 值
【解决方案2】:

您本可以让您的原始代码实际工作 - 有一个小错字('stringsAsFactors',而不是 'StringsAsFactors')。选项命令不会抱怨错误的文本,但它不会工作。正确完成后,它会将其读取为字符,而不是因子。然后,您可以将列转换为您想要的任何格式。

【讨论】:

    【解决方案3】:

    我刚刚遇到了同样的问题,并尝试了此帖子和其他重复帖子的所有修复。没有一个真正运作得那么好。我修复它的方式实际上是在 excel 方面。如果您突出显示源文件中的所有列(在 excel 中),右键单击==> 格式化单元格,然后选择“数字”,它将完美导入(只要标题下方没有非数字字符)

    【讨论】:

      猜你喜欢
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多