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" )