我对 R 非常陌生,在访问我导入的数据集时遇到问题。我正在使用 RStudio,并在导入 csv 文件时使用导入数据集功能,并将该行从控制台窗口粘贴到源窗口。代码如下:
setwd("c:/kalle/R")
stuckey <- read.csv("C:/kalle/R/stuckey.csv")
point <- stuckey$PTS
time <- stuckey$MP
但是,数据不是我习惯的整数或数字,而是因子,因此当我尝试绘制变量时,我只得到直方图,而不是通常的图。检查数据时,它似乎是有序的,只是我无法使用它,因为它是因子形式。
数据导入功能(此处:
read.csv()
)以及全局选项都可以让您说stringsAsFactors=FALSE
,这应该可以解决此问题。
默认情况下,
read.csv
检查数据的前几行以查看是否将每个变量视为数字。如果它找到非数字值,则假定该变量是字符数据,并且字符变量将转换为因子。
数据集中的 PTS 和 MP 变量似乎包含非数字,这就是您得到意外结果的原因。您可以使用
强制这些变量为数字point <- as.numeric(as.character(point))
time <- as.numeric(as.character(time))
但是任何无法转换的值都将丢失。 (R FAQ 提供了一种稍微不同的因子 -> 数字转换方法,但我永远不记得它是什么。)
您可以使用以下命令对所有
read.csv/read.*
命令进行全局设置
options(stringsAsFactors=F)
然后读取文件如下:
my.tab <- read.table( "filename.csv", as.is=T )
导入 csv 数据文件时,导入命令应反映每列之间的数据分隔 (;) 以及数值的浮点分隔符(对于数值变量 = 2,5,这将是“,”)。
因此,导入 csv 的命令必须更加全面,包含更多命令:
stuckey <- read.csv2("C:/kalle/R/stuckey.csv", header=TRUE, sep=";", dec=",")
这应该将所有变量导入为整数或数字。
这些答案都没有提到
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)
我也是 R 新手,也面临着完全相同的问题。但后来我查看了我的数据,发现这是由于我的 csv 文件在所有数字列中使用逗号分隔符 (,) 造成的(例如:1,233,444.56 而不是 1233444.56)。
我删除了 csv 文件中的逗号分隔符,然后重新加载到 R 中。我的数据框现在将所有列识别为数字。
我确信在 read.csv 函数本身中有一种方法可以处理这个问题。
对我来说,解决方案是包含skip = 0 (在文件顶部跳过的行数。可以设置>0)
我的数据<- read.csv(file = "file.csv", header = TRUE, sep = ",", skip = 22)