第一个表->阈值数据框,该阈值数据框具有各个标签的阈值
threshold <- data.frame(label=c("a","b", "c", "a","d", "e", "f"), threshold = c(12, 10, 20, 12, 12, 35, 40))
[此表将同时重复,重复的标签将具有相同的阈值,例如“ a”]
第二张表 --->包含值,标签以及唯一ID
data_id <- data.frame(id =c(1,2,1,4),label=c("a","b","a","b"), value =c(32.1,0,15.0,10))
考虑到每个唯一ID,我应该与上一张表核对值是否超过各自的阈值。
[对于每个id,其超出相应标签的阈值及其阈值的次数]
最后我期待这样的桌子 [要计算每个唯一ID和标签组合的超出值总数]
我可以通过使用if条件获取相应的标签来做到这一点,但我希望在更短的时间内获得动态的方式。 [我有数百万条记录]
答案 0 :(得分:1)
我不清楚您的目标,但查看您的最终数据框,我假设您想获取每个唯一ID和标签组合的超出值总数。以下是可能的dplyr
解决方案:
library(dplyr)
final_df <- data_id %>%
left_join(unique(threshold), by = "label") %>%
mutate(check = if_else(value > threshold, 1, 0)) %>%
group_by(id, label) %>%
summarise(exceed = sum(check))
final_df
# # A tibble: 3 x 3
# # Groups: id [?]
# id label exceed
# <dbl> <chr> <dbl>
# 1 1 a 2
# 2 2 b 0
# 3 4 b 0
请注意,由于最初将标签定义为具有不同级别的因素,所以在加入数据框时会收到警告。您可能需要设置stringsAsFactors = F
来创建数据框以保持一致性。