给予NA的DateTime因子

时间:2016-07-06 02:19:47

标签: r data-science

我使用R使用read.table("url",..)从文本文件中读取数据。在文本文件中,它们是日期和时间变量,但这些变量的类是因子。现在我需要将它转换为DateTime类。我使用了很多方法,但是当我做的时候,我可以看到这些变量的所有数据都是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

需要获取2006年12月16日至2007年12月16日之间的数据

2 个答案:

答案 0 :(得分:0)

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)

答案 1 :(得分:0)

我很高兴你设法以你想要的方式工作。应该注意的是,通过搜索字符串而不是日期,过滤任何大于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"))

另外,来自fread的{​​{1}}可将读取时间加快一个数量级,并消除了对data.table的需求:

stringsAsFactors=F