【发布时间】:2017-08-03 07:40:19
【问题描述】:
希望有人可以在这里帮助我。我已经尝试过搜索,但似乎没有什么与我想要做的匹配。
我正在尝试为我的数据框中的每一行计算行日期时间在任何其他行的时间范围内重复的实例数。
我有一个数据框,其中包含 3 个日期时间列,它们是 POSIXt,格式 = dd/mm/yyyy HH:MM。
我希望我的计算出现在一个名为“重复项”的新列中
|Row | :Start_time: | :Start_time_beg: | :Start_time_end:|
|-- |------------------|------------------|-----------------|
|1 | 01/01/2017 03:00 | 01/01/2017 01:30 | 01/01/2017 04:30|
|2 | 01/01/2017 04:00 | 01/01/2017 02:30 | 01/01/2017 05:30|
|3 | 01/01/2017 04:10 | 01/01/2017 02:40 | 01/01/2017 05:40|
|4 | 01/01/2017 05:00 | 01/01/2017 03:30 | 01/01/2017 06:30|
|5 | 01/01/2017 08:00 | 01/01/2017 06:30 | 01/01/2017 09:30|
所以在上面的示例数据中,我想计算 Start_time 出现在 Start_time_beg 范围内的每个实例:Start_time_end for rows 1:n
此数据的结果将是:
|Row |Duplicates|
|---- |----------|
|:1: | :3: | (3 as overlaps with rows 1,2,3)
|:2: | :4: | (4 overlaps with rows 1,2,3,4)
|:3: | :4: | (4 overlaps with rows 1,2,3,4)
|:4: | :3: | (3 overlaps with rows 2,3,4)
|:5: | :1: | (1 as only overlaps with itself, row 5)
我的想法是为每个 Start_time_beg:Start_time_End 创建一个 seq 数组。然后创建一个数据框,其中包含 Start_time 计数。然后我可以将它加入到原来的 df 中。
目前为止
x <- d1$Start_Time
y <- d1$Start_Time_Beg
z <- d1$Start_Time_End
t <- seq(y[1],z[1],"mins")
t2<- seq(y[2],z[2],"mins")
tn <- c(t,t2)
p<-count(tn,'tn')
这为我提供了时间范围数组中所需的 df(p)。问题是我试图创建一个循环来生成 t:nrows(行数为数千,因此无法手动输入)但我没有看
for (i in 1:length(d1$Start_Time))
{seq(d$Start_Time_Beg[c(1+i)],d$Start_Time_End[c(1+i)],"mins")}
这只是给了我一个 int length = nrows。不是我所追求的日期时间数组。
我什至不确定这是否是解决此问题的正确方法,我曾尝试使用 dplyr 但没有运气。
非常感谢任何帮助。抱歉,我的表格似乎没有正确对齐
提前感谢您的帮助
【问题讨论】:
-
请进行适当的编辑,这几乎不可读且不可复制/粘贴。
-
感谢您整理@thomasfritsch
标签: r loops datetime dataframe overlap