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

时间:2014-09-05 16:31:26

标签: 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

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

我不明白为什么会这样。我尝试了很多方法,但不知怎的,它们都不起作用,任何人都能帮助我吗?

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

2 个答案:

答案 0 :(得分:4)

您的原始数据似乎是“?”对于缺失值。我看了一下

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

head(Filter(is.not.numeric, Data$Global_reactive_power))

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

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

现在

class(Data$Global_reactive_power)
# [1] "numeric"

显示它是数字。 (请注意,您永远不应该使用typeof。这会告诉您如何存储对象的数据,它不会告诉您对象是什么。使用{{1对于那个)。

答案 1 :(得分:3)

您的Global_reactive_power列中包含一些非数字条目,导致read.table将其转换为因子。请注意,typeof(factor)integer

在文本编辑器中打开文件,查找非严格数字的条目。如果您的数据来自Excel,请确保在导出到文本之前从列(日期除外)中删除所有格式。