我有两个患者ID列表。一个很短,另一个很长。
我想知道短名单中的患者在长名单中出现了多少次,最好使用dplyr。
library(tidyr)
library(tidyverse)
shortlist<-tribble(
~PatientID,
#--
10,
11,
12,
13,
14,
15
)
longlist<-tribble(
~PatientID,
#--
10,
10,
11,
12,
12,
12,
13,
14,
15,
15,
15,
16,
17
)
所需的输出将类似于:
10 2
11 1
12 3
13 1
等等
我们根据"短名单"filter
"PatientID"并获得count
library(dplyr)
longlist %>%
filter(PatientID %in% shortlist$PatientID) %>%
count(PatientID)
-输出
# A tibble: 6 × 2
PatientID n
<dbl> <int>
1 10 2
2 11 1
3 12 3
4 13 1
5 14 1
6 15 3
shortlist %>%
group_by(PatientID) %>%
mutate(count = sum(longlist$PatientID == PatientID))
# A tibble: 6 × 2
# Groups: PatientID [6]
PatientID count
<dbl> <int>
1 10 2
2 11 1
3 12 3
4 13 1
5 14 1
6 15 3
另一种可能的解决方案:
library(tidyverse)
table(longlist) %>%
stack %>%
mutate(PatientID = levels(ind) %>% as.numeric, ind = NULL) %>%
left_join(shortlist, ., by = "PatientID")
#> # A tibble: 6 × 2
#> PatientID values
#> <dbl> <int>
#> 1 10 2
#> 2 11 1
#> 3 12 3
#> 4 13 1
#> 5 14 1
#> 6 15 3