74

我对 R 非常陌生,并且无法访问已导入的数据集。我正在使用 RStudio 并在导入我的 csv 文件并将行从控制台窗口粘贴到源窗口时使用了 Import Dataset 函数。代码如下所示:

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

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

4

8 回答 8

73

数据导入功能(此处:)read.csv()以及全局选项都可以让您说出stringsAsFactors=FALSE应该解决此问题的方法。

于 2011-03-03T23:07:12.697 回答
29

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

看起来您的数据集中的 PTS 和 MP 变量包含非数字,这就是您得到意外结果的原因。您可以将这些变量强制为数字

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

但是任何无法转换的值都会丢失。(R FAQ 给出了一种稍微不同的因子 -> 数字转换方法,但我永远记不起它是什么。)

于 2011-03-04T00:57:57.370 回答
23

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

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

于 2011-03-04T02:22:55.480 回答
8

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

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

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

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

于 2015-05-28T14:14:18.803 回答
3

这些答案都没有提到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)
于 2020-01-09T11:14:31.640 回答
2

我也是 R 新手,遇到了完全相同的问题。但是后来我查看了我的数据并注意到它是由于我的 csv 文件在所有数字列中使用逗号分隔符 (,) 引起的(例如:1,233,444.56 而不是 1233444.56)。

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

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

于 2016-05-10T14:54:16.037 回答
1

strip.white = TRUE这仅在包含在read.csv命令中时才对我有用。

(我在这里找到了解决方案。)

于 2018-08-29T09:36:51.350 回答
0

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

mydata <- read.csv(file = "file.csv", header = TRUE, sep = ",", skip = 22)

于 2018-11-15T07:50:35.287 回答