R-一个列表中的项目出现在另一个列表的次数



我有两个患者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

相关内容

  • 没有找到相关文章

最新更新