阈值超出两张表的检查

时间:2018-08-04 01:32:20

标签: r dataframe

第一个表->阈值数据框,该阈值数据框具有各个标签的阈值

threshold <- data.frame(label=c("a","b", "c", "a","d", "e", "f"), threshold = c(12, 10, 20, 12, 12, 35, 40))

enter image description here

[此表将同时重复,重复的标签将具有相同的阈值,例如“ 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))

enter image description here

考虑到每个唯一ID,我应该与上一张表核对值是否超过各自的阈值。

[对于每个id,其超出相应标签的阈值及其阈值的次数]

最后我期待这样的桌子 [要计算每个唯一ID和标签组合的超出值总数]

Final Table

我可以通过使用if条件获取相应的标签来做到这一点,但我希望在更短的时间内获得动态的方式。 [我有数百万条记录]

1 个答案:

答案 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来创建数据框以保持一致性。