我正在尝试将Excel创建的.csv文件读入R,其中所有向量(CSV文件中的列)都是数字。但是,每次导入它们时都会转换为因子。
以下是我的CSV状态示例:
这是我的代码:
options(StringsAsFactors=F)
data<-read.csv("in.csv",dec=",",sep=";")
如您所见,我负责将de dec设置为“,”并将sep设置为“;”。但是,所有应该是数字的向量都是因子!
有人可以给我一些建议吗?谢谢!
答案 0 :(得分:12)
csv文件NA
中的N/A
个字符串被解释为character
,然后整个列都会转换为character
。如果您在stringsAsFactors = TRUE
或options
(默认)中有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;格式化单元格然后选择'数字'它将导入完全正常(只要标题下面没有非数字字符)