如何计算R中ID内两个 Dataframe 的精确匹配

nkcskrwz  于 2023-02-27  发布在  其他
关注(0)|答案(3)|浏览(163)

我有两个数据集,与下面的数据集类似(但有4m个观测值),我想计算两个 Dataframe 之间匹配的样本天数(见下面的示例)。

DF1                   
ID   date             
1    1992-10-15       
1    2010-02-17
2    2019-09-17
2    2015-08-18
3    2020-10-27
3    2020-12-23

DF2 
ID   date
1    1992-10-15
1    2001-04-25
1    2010-02-17
3    1990-06-22
3    2014-08-18
3    2020-10-27

Expected output 
ID   Count
1    2
2    0
3    1

我试过聚合函数(虽然不确定在"which"中放入什么):

test <- aggregate(date~ID, rbind(DF1, DF2), length(which(exact?)))

和表函数:

Y<-table(DF1$ID)
    X <- table(DF2$ID)
    Y2 <- DF1[Y %in% X,]

我很难找到一个例子来帮助我的情况。
感谢您的帮助!

fjnneemd

fjnneemd1#

碱基R

data.frame(table(factor(merge(df1,df2)$ID, unique(df1$ID))))
  Var1 Freq
1    1    2
2    2    0
3    3    1
dsekswqp

dsekswqp2#

使用tidyverse

library(dplyr)
library(tidyr)
inner_join(df1, df2) %>% 
  complete(ID = unique(df1$ID)) %>%
  reframe(Freq = sum(!is.na(date)), .by = "ID")
  • 输出
# A tibble: 3 × 2
     ID  Freq
  <int> <int>
1     1     2
2     2     0
3     3     1
d6kp6zgx

d6kp6zgx3#

下面是使用“dplyr”和“tidyr”的一种方法:

library(dplyr)
library(tidyr)

DF1 %>% 
  semi_join(DF2) %>% 
  count(ID) %>% 
  complete(ID = DF1$ID,
           fill = list(n = 0))

#> Joining with `by = join_by(ID, date)`
#> # A tibble: 3 × 2
#>      ID     n
#>   <dbl> <int>
#> 1     1     2
#> 2     2     0
#> 3     3     1

资料

DF1 <- tibble(ID = c(1,1,2,2,3,3),
              date = c("1992-10-15", "2010-02-17", "2019-09-17",
                       "2015-08-18", "2020-10-27", "2020-12-23"))

DF2 <- tibble(ID = c(1,1,1,3,3,3),
              date = c("1992-10-15", "2001-04-25", "2010-02-17",
                       "1990-06-22", "2014-08-18", "2020-10-27"))

创建于2023年2月16日,使用reprex v2.0.2

相关问题