【发布时间】:2018-05-29 16:41:31
【问题描述】:
我有 2 个要协调的 tibble 数据帧。第一个小标题有超过一百万个观察值,前几行如下:
data
ID Time(Converted to number)
1 23160
1 23161
1 23162
1 23163
1 23164
1 23165
2 24251
2 24252
第二个小标题是一个查找表(其中包含已发生的特定事件的信息),简化版本如下:
lookup_table
ID Event_Time Event_Indicator Number_of_Cumulative_Events
1 23162 1 1
1 23164 1 2
2 24255 1 1
2 24280 0 1
我想在第一个 tibble 中创建第三列,以便显示观察时累积事件的数量。因此,上述示例中的第 3 列将是:
ID Time(Converted to number) Number
1 23160 0
1 23161 0
1 23162 1
1 23163 1
1 23164 2
1 23165 2
2 24251 0
2 24252 0
由于计算时间的原因,我试图避免必须遍历数百万个观察结果来将每个观察结果的时间与查找表中的 Event_Time 进行比较。
但是,我不确定如何在不使用循环的情况下执行此操作。问题是lookup_table多次包含一些ID,如果所有ID只出现在lookup_table中一次,那么我可以这样做:
data$Event_Time <- lookup_table[match(data$ID, lookup_table$ID),"Event_Time"]
data$Number <- data %>% mutate(ifelse(Time >= Event_Time,1,0))
有什么想法可以避免使用循环并为每个观察应用查找条件吗?谢谢。
编辑:我不是想加入表格,而是更多地比较lookup_table和数据表中的时间列以获得我想要的列。例如,如果我要编写一个低效的循环函数,它将是:
for (i in 1:nrow(data)) {
data$Number[i] <- subset(lookup_table,ID == data$ID[i])[max(which
(data$Time[i] >= lookup_table$Event_Time)), "Number_of_Cumulative_Events"]
}
【问题讨论】:
标签: r