我希望能够以更加巧妙或“整洁”的方式,在tidyverse中使用查找表,但是却找不到令人满意的解决方案。
我有一个数据集和查找表:
# Sample data
data <- data.frame(patients = 1:5,
treatment = letters[1:5],
hospital = c("yyy", "yyy", "zzz", "www", "uuu"),
response = rnorm(5))
# Lookup table
lookup <- tibble(hospital = c("yyy", "uuu"), patients = c(1,5))
...其中查找表中的每一行都是我想要用来过滤第一个数据表(data)的精确模式。
期望的结果应该如下所示:
# A tibble: 3 x 4
patients treatment hospital response
<dbl> <chr> <chr> <dbl>
1 1.00 a yyy -0.275
2 5.00 e uuu -0.0967
我想到的最简单的解决方案是这样的:
我想到的最简单的解决方案是这样的:
as.tibble(dat) %>%
filter(paste(hospital, patients) %in% paste(lookup$hospital, lookup$patients))
然而,许多人经常这样做 - 是否有更清洁和更方便的方法来做这件事(例如,在您的查找表中使用超过两列)?
semi_join(data, lookup)
? - talat过滤(data,医院 %in% 查找表$医院 & 患者 %in% 查找表$患者)
。 - hplieningerinner_join(data, lookup, by = c("hospital", "patients"))
但我想知道它是否真的更清晰和方便.. - MrSmithGoesToWashington