我在 R 中有以下数据框:
df <- data.frame(name = c('p1_start','p1_end','p2_start','p2_end','p1_start','p1_end','p2_start','p2_end','p1_start','p1_end','p2_start','p2_end','p1_start','p1_end','p2_start','p2_end'),
time = c(1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31),
target = c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2),
comb = c(0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1))
还有另一个数据框:
data <- data.frame(time = c(2,5,8,14,14,20,21,26,28,28),
name = c('a','b','c','d','e','f','g','h','i','j'))
因此,如果我们看一下,df我们可以按目标和组合对数据进行排序,我们会注意到基本上存在“组”。例如target=1和comb=0有四个条目p1_start,p1_end,p2_start,p2_end,对于所有其他目标/组合组合都是相同的。
另一方面data包含带有time时间戳的条目。
目标:我想基于time.
示例: 的第一个条目data具有time=2发生在 之间的含义p1_start,p1_end因此它应该获取值target=1并comb=0映射到data数据框。
示例 2data : with的条目time=14发生在 之间p2_start,p2_end因此它们应该获取值target=1并comb=1映射到data数据框。
想法df:我以为我通过targetand进行迭代,comb并且为它们的每个组合检查是否有data时间介于两者之间的行。第二个可以使用以下命令完成:
data[which(data$time > p1_start & data$time < p2_end),]
一旦我得到这些行,就很容易附加这些值。 问题:我怎么能做迭代?我尝试了以下方法:
df %>%
group_by(target, comb) %>%
print(data[which(data$time > df$p1_start & data$time < df$p2_end),])
但我收到一个time尚未初始化的错误