在近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
答案 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)
给出作为情节。希望有所帮助。
答案 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
简要说明发生了什么
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
能够在将来自动处理的内容。
fread
命令可以链接(从左到右);我使用它来分配数据之前的数据。无论您发现或多或少可读,都由您决定,因为只有边际性能差异。
由于我们必须将数字字段作为字符串读取,我们现在将它们重新命名为数字;这是执行此操作的标准data.table
语法。
一旦我们获得了我们喜欢的数据子集和正确的类型,我们就可以在data.table
中将hist
作为参数传递并获得我们想要的结果。
请注意,如果您希望此数据集中的 all 是直方图,您可以稍微压缩一下代码:
j