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

int*_*ael 17 csv r read.table

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

以下是我的CSV的示例:

在此输入图像描述

这是我的代码:

options(StringsAsFactors=F)
data<-read.csv("in.csv",dec=",",sep=";")
Run Code Online (Sandbox Code Playgroud)

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

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

Hen*_*rik 12

NA在CSV文件中的字符串,N/A被解释为character,然后整列转换character.如果您具有stringsAsFactors = TRUEin options或in 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)
Run Code Online (Sandbox Code Playgroud)

更新以下评论

虽然从提供的样本数据中看不出来,但是'$'与数字连接的实例也存在问题,例如'$ 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)
Run Code Online (Sandbox Code Playgroud)


aif*_*lle 5

您可能已经使原始代码真正可以工作了-有一个很小的错字(“ stringsAsFactors”,而不是“ StringsAsFactors”)。options命令不会抱怨输入错误的文本,但它不会起作用。正确完成后,它将读取为char而不是factor。然后,您可以将列转换为所需的任何格式。