DateTime 给出 NA 的因素
factor to DateTime giving NA's
我使用 read.table("url",..)
使用 R 从文本文件中读取数据。在文本文件中,它们随日期和时间变化,但这些变量的 class 是因素。现在我需要将其转换为 DateTime class。我使用了很多方法,但每当我这样做时,我都可以看到这些变量的所有数据都是 NA。
mydata <- read.table("C:/household_power_consumption.txt", header=TRUE, sep=";", na.strings="?" )
mydata$Date<-strptime(x=as.character(mydata$Date),format="%d/%m/%Y %H:%M")
sub1<-subset(mydata,mydata$Date>=as.POSIXct("01/02/2006") & mydata$Date<=as.POSIXct("02/02/2006"))
这是一些样本数据
Date Time D1 D2 D3
16/12/2006 17:26:00 5.374 0.498 233.290
16/12/2006 17:27:00 5.388 0.502 233.740
16/12/2007 17:28:00 3.666 0.528 235.680
需要获取从 16/12/2006 到 16/12/2007 之间的数据
finalData <- mydata[mydata$Date %in% c("1/2/2007","2/2/2007"),]
SetTime <-strptime(paste(finalData$Date, finalData$Time, sep=" "),"%d/%m/%Y %H:%M:%S")
finalData <- cbind(SetTime, finalData)
我很高兴你设法让事情按照你想要的方式工作。应该注意的是,通过搜索字符串而不是日期,按任何大于 2 天的日期范围进行过滤要困难得多(例如:原始问题中概述的情况)。
还应该注意的是,OP 向我发送了完整的数据文件,这段代码对我来说非常有效,但对他们来说却不是(我们都在 R 3.3.0 上):
mydata <- read.table("household_power_consumption.txt", header=TRUE, sep=";", na.strings="?", stringsAsFactors=F )
mydata$Date<-as.Date( mydata$Date, format="%d/%m/%Y" )
sub1<-subset(mydata,mydata$Date>=as.Date("2007-02-01") & mydata$Date<=as.Date("2007-02-02"))
然后可以轻松更改最后一行以匹配您之后的日期范围:
sub1<-subset(mydata,mydata$Date>=as.Date("2006-12-16") & mydata$Date<=as.Date("2007-12-16"))
顺便说一句,data.table
中的 fread
将读取时间加快了一个数量级,并且不再需要 stringsAsFactors=F
:
library( data.table )
mydata <- fread( "household_power_consumption.txt" )
我使用 read.table("url",..)
使用 R 从文本文件中读取数据。在文本文件中,它们随日期和时间变化,但这些变量的 class 是因素。现在我需要将其转换为 DateTime class。我使用了很多方法,但每当我这样做时,我都可以看到这些变量的所有数据都是 NA。
mydata <- read.table("C:/household_power_consumption.txt", header=TRUE, sep=";", na.strings="?" )
mydata$Date<-strptime(x=as.character(mydata$Date),format="%d/%m/%Y %H:%M")
sub1<-subset(mydata,mydata$Date>=as.POSIXct("01/02/2006") & mydata$Date<=as.POSIXct("02/02/2006"))
这是一些样本数据
Date Time D1 D2 D3
16/12/2006 17:26:00 5.374 0.498 233.290
16/12/2006 17:27:00 5.388 0.502 233.740
16/12/2007 17:28:00 3.666 0.528 235.680
需要获取从 16/12/2006 到 16/12/2007 之间的数据
finalData <- mydata[mydata$Date %in% c("1/2/2007","2/2/2007"),]
SetTime <-strptime(paste(finalData$Date, finalData$Time, sep=" "),"%d/%m/%Y %H:%M:%S")
finalData <- cbind(SetTime, finalData)
我很高兴你设法让事情按照你想要的方式工作。应该注意的是,通过搜索字符串而不是日期,按任何大于 2 天的日期范围进行过滤要困难得多(例如:原始问题中概述的情况)。
还应该注意的是,OP 向我发送了完整的数据文件,这段代码对我来说非常有效,但对他们来说却不是(我们都在 R 3.3.0 上):
mydata <- read.table("household_power_consumption.txt", header=TRUE, sep=";", na.strings="?", stringsAsFactors=F )
mydata$Date<-as.Date( mydata$Date, format="%d/%m/%Y" )
sub1<-subset(mydata,mydata$Date>=as.Date("2007-02-01") & mydata$Date<=as.Date("2007-02-02"))
然后可以轻松更改最后一行以匹配您之后的日期范围:
sub1<-subset(mydata,mydata$Date>=as.Date("2006-12-16") & mydata$Date<=as.Date("2007-12-16"))
顺便说一句,data.table
中的 fread
将读取时间加快了一个数量级,并且不再需要 stringsAsFactors=F
:
library( data.table )
mydata <- fread( "household_power_consumption.txt" )