【发布时间】:2014-08-27 23:27:38
【问题描述】:
我的问题很简单。我有表格,其中每一行都是事件(给出了月、日、小时、分钟)。但是,机器设置为 24/7。所以我有比我需要的更多的事件(行)。 如何从白天删除多余的行,从晚上(从日落到日出)只保留行? 可怕的是,日出/日落的时间每天都略有不同。
在这个例子中,我提供了两个表格。第一个是包含所有事件的表格,第二个包含每天的日落/日出时间。
如果可以提取,请注意每个夜晚由两个日期组成 可能是插入到包含夜晚 ID 的表中的附加列? (见下面的方案)
# table with all events
my.table <- data.frame(event = 1:34,
day = rep(c(30,31,1,2,3), times = c(8,9,7,8,2)),
month = rep(c(3,4), each = 17),
hour = c(13,13,13,13,22,
22,23,23,2,2,2,
14,14,14,19,22,22,
2,2,2,14,15,22,22,
3,3,3,14,14,14,
23,23,2,14),
minute = c(11,13,44,55,27,
32,54,57,10,14,
26,12,16,46,30,
12,13,14,16,45,
12,15,12,15,24,
26,28,12,16,23,12,13,11,11))
# timings of sunset/sunrise for each day
sun.table <- data.frame(day = c(30,31,31,1,1,2,2,3),
month = rep(c(3,4), times = c(3,5)),
hour = rep(c(19,6), times = 4),
minute = c(30,30,31,29,32,
28,33,27),
type = rep(c("sunset","sunrise"), times = 4))
# rigth solution reduced table would contain only rows:
# 5,6,7,8,9,10,11,16,17,18,19,20,23,24,25,26,27,31,32,33.
# nrow("reduced table") == 20
【问题讨论】:
-
my.table应该有一个小时专栏吗? -
sun.table中的每一天是否也应该有日出和日落? -
嗯,不一定。机器在接近傍晚前的第一天开始录制(第一天只有日落)并在晚上结束录制(最后一天只有日出)。 “中间”的所有日子都有“日落”和“日出”时间。如果你愿意,我可以添加时间,这样它们总是每天两个,或者 zou 可以只对上面表格中的两个时间进行子集。如果这样的程序将简化提取过程,是否排除几天并不重要。
-
第一天(29日)日出
标签: r datetime dataframe intervals extraction