【发布时间】:2015-06-02 11:56:28
【问题描述】:
谁能帮忙,我有一个数据框 (set_rise),每一行包含当天的日落时间和第二天的日出时间。我有第二个数据框(data),其中有一列日期/时间。我想通过在data 中获取日期/时间并检查它是否在set_rise 中的任何时间之间,在data 中创建一个对应于白天或晚上的字母的第二列.
#df1- sunset, sunrise times
set_rise
set rise
1 2013-03-01 18:28:00 2013-03-02 08:27:00
2 2013-03-02 18:31:00 2013-03-03 08:23:00
3 2013-03-03 18:35:00 2013-03-04 08:19:00
4 2013-03-04 18:38:00 2013-03-05 08:15:00
5 2013-03-05 18:42:00 2013-03-06 08:12:00
6 2013-03-06 18:45:00 2013-03-07 08:08:00
#df2 my data
timedate
1 2013-03-01 19:00:00
2 2013-03-03 10:00:00
3 2013-03-06 00:01:00
我想要这样的输出
data
timedate night_day
2013-03-01 19:00:00 N
2013-03-03 10:00:00 D
2013-03-06 00:01:00 N
输出 dput(set_rise)
dput(set_rise)
structure(list(set = structure(list(sec = 0, min = 28L, hour = 18L,
mday = 1L, mon = 2L, year = 113L, wday = 5L, yday = 59L,
isdst = 0L, zone = "WET", gmtoff = NA_integer_), .Names = c("sec",
"min", "hour", "mday", "mon", "year", "wday", "yday", "isdst",
"zone", "gmtoff"), class = c("POSIXlt", "POSIXt")), rise = structure(list(
sec = 0, min = 27L, hour = 8L, mday = 2L, mon = 2L, year = 113L,
wday = 6L, yday = 60L, isdst = 0L, zone = "WET", gmtoff = NA_integer_), .Names = c("sec",
"min", "hour", "mday", "mon", "year", "wday", "yday", "isdst",
"zone", "gmtoff"), class = c("POSIXlt", "POSIXt")), night = "N"), .Names = c("set",
"rise", "night"), row.names = 1L, class = "data.frame")
dput(数据)的输出
dput(data)
structure(list(timedate = structure(c(1362873600, 1362960000,
1364342400), class = c("POSIXct", "POSIXt"))), .Names = "timedate", row.names = c(NA,
-3L), class = "data.frame")
【问题讨论】:
-
如果您添加了一个您希望看到的输出示例,将会有所帮助。
-
看来你搞乱了日期时间转换。对于
set_rise,我得到13-03-01日期(这是13 年而不是2013 年)!只需提供set_rise和data并跳过构建它的方式。完成后发布dput(set_rise)和dput(data)的输出。但在此之前,请检查日期是否符合您的预期。 -
感谢您的回复,我已经解决了日期问题并优化了发布的数据并发布了首选输出。
-
谢谢,该解决方案完美运行。
-
感谢所有花时间提供帮助的人,非常感谢。由于速度的原因,我已经接受了 nicola 的回答,我有很多大型数据集(每个 cirka 20 000)。
标签: r