我是R的新手,对任何改进建议持开放态度。
我导入一些财务数据并检查缺失的数据。我想出这样做的一种方法是创建一个POSIXct向量并将其操作为可比较的格式。请参阅下面的代码;
DateTimeC = seq(as.POSIXct("1986/12/1"), as.POSIXct("1986/12/2"), "mins")
DateTimeC = format(as.POSIXct(DateTimeC,format='%Y.%m.%d %H:%M'),format='%Y.%m.%d %H:%M')
DateTimeC = data.frame(DateTimeC)
colnames(DateTimeC) = c('DateTime')
以上创建了我的测试期间所需的列表。然后我将测试与导入进行比较并删除所有匹配项;
DataDelete = DateTimeC[!DateTimeC$DateTime %in% DateTime$DateTime, ]
DataError = data.frame(DataDelete)
colnames(DataError) = c('DateTime')
我必须为Xmas Holiday和New Year假期创建数据框架。然后我将这些data.frames与数据进行比较并删除任何匹配项,它遵循与上述完全相同的过程,只有Date,amp;时间数据帧是Xmas&新年期间。
我在这里遇到的问题是我拥有的数据集超过28年。我需要重复上述过程56次以获得所需的结果。
问题
as.POSIXct
函数/结构中是否有某些内容可以让我指定我希望X-Y每年的日期和时间,分钟,当天。或者我是否必须这样做手动?答案 0 :(得分:3)
从技术上讲,每天有24 * 60 = 1440分钟。 ISO8601标准将00:00定义为新日期的初始时刻。除非您匹配的遗留代码也为感兴趣的时间片分配1441分钟,否则您可能希望调整您的seq()调用。在下文中,我假设这种简化是可以接受的。
首先,您可以更简洁地编写现有代码:
ts <- seq(as.POSIXct('1986/12/1 00:00'), as.POSIXct('1986/12/1 23:59'), 'mins')
dtc <- data.frame(DateTime=strftime(ts, format='%Y.%m.%d %H:%M'))
请注意,您可以直接在data.frame调用中指定列名:
de <- data.frame(DateTime=dtc[!dtc$DateTime %in% dt$DateTime,])
如果您希望在几年内自动完成一系列日期,您可以执行以下操作:
for (year in seq(1986,2014))
for (day in c('1/1','12/1','12/25')) {
dd <- paste(year,day,sep='/')
ts <- seq(as.POSIXct(paste(dd,'00:00')), as.POSIXlt(paste(dd,'23:59')), 'mins')
dtc <- data.frame(DateTime=strftime(ts, format='%Y.%m.%d %H:%M'))
de <- data.frame(DateTime=dtc[!dtc$DateTime %in% dt$DateTime,])
... further processing here ...
}
您可能还想查看* apply系列函数(请参阅?lapply),它可以提供更优雅的解决方案,但需要您轻松操作列表对象。
答案 1 :(得分:2)
您可以使用以下内容根据需要创建不同年份的所有日期:
DateList <- lapply(1999:2010, function(year){
seq(as.POSIXct(paste0(year, "/12/1")),
as.POSIXct(paste0(year, "/12/2")), "mins")})
names(DateList) <- 1999:2010
结果列出了1999年至2010年的日期:
> str(DateList)
List of 12
$ 1999: POSIXct[1:1441], format: "1999-12-01 00:00:00" "1999-12-01 00:01:00" "1999-12-01 00:02:00" "1999-12-01 00:03:00" ...
$ 2000: POSIXct[1:1441], format: "2000-12-01 00:00:00" "2000-12-01 00:01:00" "2000-12-01 00:02:00" "2000-12-01 00:03:00" ...
$ 2001: POSIXct[1:1441], format: "2001-12-01 00:00:00" "2001-12-01 00:01:00" "2001-12-01 00:02:00" "2001-12-01 00:03:00" ...
$ 2002: POSIXct[1:1441], format: "2002-12-01 00:00:00" "2002-12-01 00:01:00" "2002-12-01 00:02:00" "2002-12-01 00:03:00" ...
$ 2003: POSIXct[1:1441], format: "2003-12-01 00:00:00" "2003-12-01 00:01:00" "2003-12-01 00:02:00" "2003-12-01 00:03:00" ...
$ 2004: POSIXct[1:1441], format: "2004-12-01 00:00:00" "2004-12-01 00:01:00" "2004-12-01 00:02:00" "2004-12-01 00:03:00" ...
$ 2005: POSIXct[1:1441], format: "2005-12-01 00:00:00" "2005-12-01 00:01:00" "2005-12-01 00:02:00" "2005-12-01 00:03:00" ...
$ 2006: POSIXct[1:1441], format: "2006-12-01 00:00:00" "2006-12-01 00:01:00" "2006-12-01 00:02:00" "2006-12-01 00:03:00" ...
$ 2007: POSIXct[1:1441], format: "2007-12-01 00:00:00" "2007-12-01 00:01:00" "2007-12-01 00:02:00" "2007-12-01 00:03:00" ...
$ 2008: POSIXct[1:1441], format: "2008-12-01 00:00:00" "2008-12-01 00:01:00" "2008-12-01 00:02:00" "2008-12-01 00:03:00" ...
$ 2009: POSIXct[1:1441], format: "2009-12-01 00:00:00" "2009-12-01 00:01:00" "2009-12-01 00:02:00" "2009-12-01 00:03:00" ...
$ 2010: POSIXct[1:1441], format: "2010-12-01 00:00:00" "2010-12-01 00:01:00" "2010-12-01 00:02:00" "2010-12-01 00:03:00" ...
例如,要访问2009年的日期,您现在可以使用:
DateList[["2009"]]