read.table() 将数值读取为 R 中的整数

Gin*_*ger 4 r numeric read.table

我在用 Data <- read.table("file", head=TRUE, sep=";")读取我的文件。

head我的文件看起来是这样的:

         Date     Time Global_active_power Global_reactive_power Voltage Global_intensity
66637 2007-02-01 00:00:00               0.326                 0.128 243.150            1.400
66638 2007-02-01 00:01:00               0.326                 0.130 243.320            1.400
66639 2007-02-01 00:02:00               0.324                 0.132 243.510            1.400
66640 2007-02-01 00:03:00               0.324                 0.134 243.900            1.400
66641 2007-02-01 00:04:00               0.322                 0.130 243.160            1.400
66642 2007-02-01 00:05:00               0.320                 0.126 242.290            1.400
      Sub_metering_1 Sub_metering_2 Sub_metering_3
66637          0.000          0.000              0
66638          0.000          0.000              0
66639          0.000          0.000              0
66640          0.000          0.000              0
66641          0.000          0.000              0
66642          0.000          0.000              0
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试typeof(Data$Global_reactive_power)显示integer(应该是numeric)。

我不明白为什么会这样。我尝试了很多方法,但不知何故它们都不起作用,有人可以帮我吗?

我的文件在这里:https : //d396qusza40orc.cloudfront.net/exdata%2Fdata%2Fhousehold_power_consumption.zip

MrF*_*ick 5

看来你的原始数据为“?” 对于缺失值。我通过使用查看

is.not.numeric<-function(x) {
    is.na(as.numeric(as.character(x)))
}

head(Filter(is.not.numeric, Data$Global_reactive_power))
Run Code Online (Sandbox Code Playgroud)

当 R 遇到非数字值,例如“?” 在列中,它将列强制为一个因子。为了正确读取数据,请尝试

Data<-read.table("household_power_consumption.txt", 
    header=TRUE, sep=";", na.strings="?")
Run Code Online (Sandbox Code Playgroud)

现在

class(Data$Global_reactive_power)
# [1] "numeric"
Run Code Online (Sandbox Code Playgroud)

显示它是数字。(请注意,您永远不应该真正需要使用typeof。它会告诉您对象的数据是如何存储的,它不会告诉您对象什么。class()用于此目的)。