将 csv 数据集导入到 R,但是这些值成为因子

我是非常新的 R 和我有麻烦访问一个数据集,我已经导入。我正在使用 RStudio,在导入 csv 文件时使用 Import Dataset 函数,并将该行从控制台窗口粘贴到源代码窗口。守则如下:

setwd("c:/kalle/R")
stuckey <- read.csv("C:/kalle/R/stuckey.csv")
point <- stuckey$PTS
time <- stuckey$MP

然而,这些数据不是我所习惯的整数或数字,而是因子,所以当我试图绘制变量时,我只能得到直方图,而不是通常的图。当检查数据时,它似乎是有序的,只是我不能使用它,因为它的因素形式。

185058 次浏览

数据导入函数(这里是 read.csv())和全局选项都提供了说 stringsAsFactors=FALSE的选项,这样就可以解决这个问题。

默认情况下,read.csv检查数据的前几行,以查看是否将每个变量视为数值。如果找到非数值,则假定该变量为字符数据,并将字符变量转换为因子。

数据集中的 PTS 和 MP 变量似乎包含非数值,这就是为什么会得到意想不到的结果。可以强制这些变量使用

point <- as.numeric(as.character(point))
time <- as.numeric(as.character(time))

但是任何无法转换的值都将丢失。(R FAQ 给出的 factor-> 数值转换方法略有不同,但我从来不记得它是什么。)

可以为所有 read.csv/read.*命令全局设置此值 options(stringsAsFactors=F)

然后阅读文件如下: my.tab <- read.table( "filename.csv", as.is=T )

当导入 csv 数据文件时,import 命令应该反映每个列(;)之间的数据分离,以及数值的浮点数分隔符(对于数值变量 = 2,5,这将是“ ,”)。

因此,导入 csv 的命令必须更加全面,包含更多的命令:

    stuckey <- read.csv2("C:/kalle/R/stuckey.csv", header=TRUE, sep=";", dec=",")

这应该将所有变量导入为整数或数值。

我也是 R 的新手,面临着同样的问题。但是后来我查看了我的数据,发现这是由于我的 csv 文件在所有数字列中都使用了逗号分隔符(,)(Ex: 1,233,444.56而不是123344.56)造成的。

我删除了 csv 文件中的逗号分隔符,然后重新加载到 R 中。我的数据帧现在可以识别所有列为数字。

我确信在 read.csv 函数本身中有一种方法可以处理这个问题。

只有在 read.csv命令中包含 strip.white = TRUE时,这个命令才能正常工作。

(我找到了解决方案 给你。)

对于我来说,解决方案是包括跳过 = 0 (文件顶部要跳过的行数。可以设置 > 0)

Mydata <-read.csv (file = “ file.csv”,header = TRUE,sep = “ ,”,Skip = 22)

这些答案都没有提到 colClasses参数,这是在 read.csv中指定变量类的另一种方法。

 stuckey <- read.csv("C:/kalle/R/stuckey.csv", colClasses = "numeric") # all variables to numeric

或者可以指定要转换的列:

stuckey <- read.csv("C:/kalle/R/stuckey.csv", colClasses = c("PTS" = "numeric", "MP" = "numeric") # specific columns to numeric

请注意,如果一个变量不能转换为数字,那么它将被转换为默认的因子,这使得它更难以转换为数字。因此,最好将所有变量读入为“字符”colClasses = "character",然后在读入 csv 时将特定列转换为数字:

stuckey <- read.csv("C:/kalle/R/stuckey.csv", colClasses = "character")
point <- as.numeric(stuckey$PTS)
time <- as.numeric(stuckey$MP)