绘制数据子集的直方图

时间:2015-07-08 05:58:44

标签: r histogram

The image shows the screen shot of the .txt file of the data. The data consists of 2,075,259 rows and 9 columns

在近4年的时间内以一分钟的采样率测量一个家庭的电力消耗。可提供不同的电量和一些子计量值。

仅需要2007-02-01和2007-02-02日期的数据。 我试图绘制一个" Global_active_power"的直方图。在上述日期。

请注意,在此数据集中,缺失值被编码为"?"]

这是我试图绘制直方图的代码:

{

data <- read.table("household_power_consumption.txt", header=TRUE)
my_data <- data[data$Date %in% as.Date(c('01/02/2007', '02/02/2007'))]

my_data <- gsub(";", " ", my_data)    # replace ";" with " "  
my_data <- gsub("?", "NA", my_data)   # convert "?" to "NA"
my_data <- as.numeric(my_data)      # turn into numbers

hist(my_data["Global_active_power"])

}

运行代码后,显示此错误:

hist.default(my_data [&#34; Global_active_power&#34;])出错: 无效的休息次数&#39;

请你帮我看一下代码中的错误。

数据文件的链接:https://d396qusza40orc.cloudfront.net/exdata%2Fdata%2Fhousehold_power_consumption.zip

2 个答案:

答案 0 :(得分:1)

您需要明确提供分隔符(&#34;;&#34;),并且您的类型不是您认为的类型,请注意:

data <- read.table("household_power_consumption.txt", header=TRUE, sep=';', na.strings='?')
data$Date <- as.Date(data$Date, format='%d/%m/%Y')
bottom.date <- as.Date('01/02/2007', format='%d/%m/%Y')
top.date <- as.Date('02/02/2007', format='%d/%m/%Y')
my_data <- data[data$Date > bottom.date & data$Date < top.date,3] 
hist(my_data)

给出plot from the above code作为情节。希望有所帮助。

答案 1 :(得分:1)

鉴于你有2米的行(虽然太多很多列),你仍然坚定地进入fread领域;

在这里,我将如何做你想做的事:

library(data.table)
data<-fread("household_power_consumption.txt",sep=";", #1
            na.strings=c("?","NA"),colClasses="character" #2
            )[,Date:=as.Date(Date,format="%d/%m/%Y")
              ][Date %in% seq(from=as.Date("2007-02-01"), #3
                              to=as.Date("2007-02-02"),by="day")]

numerics<-setdiff(names(data),c("Date","Time")) #4
data[,(numerics):=lapply(.SD,as.numeric),.SDcols=numerics]

data[,hist(Global_active_power)] #5

histogram

简要说明发生了什么

1:有关该软件包的详细介绍,请参阅data.table vignettes。在这里,根据您的数据结构,我们事先告诉fread ;是区分字段(非标准)

2:我们可以预先告诉fread在某些列中可以预期?,并且应该将它们视为NA - 例如,此处&#39; s {{ 1}}在设置data[8640]之前:

na.strings

我们设置 Date Time Global_active_power Global_reactive_power Voltage Global_intensity Sub_metering_1 Sub_metering_2 Sub_metering_3 1: 21/12/2006 11:23:00 ? ? ? ? ? ? NA 后,我们不得不稍后将na.strings替换为?

NA

另一方面,我们还必须将这些字段读为 Date Time Global_active_power Global_reactive_power Voltage Global_intensity Sub_metering_1 Sub_metering_2 Sub_metering_3 1: 21/12/2006 11:23:00 NA NA NA NA NA NA s,即使它们是数字的。这是我希望character能够在将来自动处理的内容。

  1. fread命令可以链接(从左到右);我使用它来分配数据之前的数据。无论您发现或多或少可读,都由您决定,因为只有边际性能差异。

  2. 由于我们必须将数字字段作为字符串读取,我们现在将它们重新命名为数字;这是执行此操作的标准data.table语法。

  3. 一旦我们获得了我们喜欢的数据子集和正确的类型,我们就可以在data.table中将hist作为参数传递并获得我们想要的结果。

  4. 请注意,如果您希望此数据集中的 all 是直方图,您可以稍微压缩一下代码:

    j