读取CSV文件时,数字变量转换为因子

时间:2013-11-19 00:18:03

标签: r csv read.table

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

以下是我的CSV状态示例:

enter image description here

这是我的代码:

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

如您所见,我负责将de dec设置为“,”并将sep设置为“;”。但是,所有应该是数字的向量都是因子!

有人可以给我一些建议吗?谢谢!

3 个答案:

答案 0 :(得分:12)

csv文件NA中的N/A个字符串被解释为character,然后整个列都会转换为character。如果您在stringsAsFactors = TRUEoptions(默认)中有read.csv,则该列会进一步转换为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)

答案 1 :(得分:4)

你可能已经让你的原始代码真正起作用了 - 这是一个很小的错字(&#39; stringsAsFactors&#39;,&#39; StringsAsFactors&#39;)。选项命令不会抱错文本,但它不会工作。正确完成后,它会将其作为字符而不是因子读取。然后,您可以将列转换为您想要的任何格式。

答案 2 :(得分:0)

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