【问题标题】:How to identify which data belongs to which dataset after merging them in R? [closed]在R中合并它们后如何识别哪些数据属于哪个数据集? [关闭]
【发布时间】:2021-11-24 20:18:06
【问题描述】:

我有两个大数据集,每个数据集超过 300 万个,我使用 full_join 使用变量“N_AIH”将它们合并在一起。事情是,在数据集 1 中,这个变量被称为“N_AIH”,在数据集 2 中,它被称为“NUM_AIH”。这就是我加入他们的方式:

join_test <- full_join(dataset1, dataset2, by = c("N_AIH" = "NUM_AIH"), keep = TRUE)

我必须将两个变量都保留在连接的数据集中,但现在我需要识别:

1 - 两个数据集中的 Obs(匹配项) 2 - 在数据集 1 中但不在数据集 2 中的 Obs 3 - 在数据集 2 中但不在数据集 1 中的 Obs

我似乎找不到办法。我需要使用 N_AIH/NUM_AIH 变量。

【问题讨论】:

  • 我不明白。使用 full_join 你已经拥有了你需要的东西:1)没有 NA 的行出现在两个数据帧中; 2) "N_AIH" 列中具有 NA 的行仅存在于第二个数据帧中,3) 反之亦然,"NUM_AIH" 列中具有 NA 的行仅存在于第一个数据帧中
  • 从这段代码的输出看来,full_join 保留了两列:set.seed(4)dataset1 &lt;- data.frame(id1=1:10,N_AIH=sample(letters,10))dataset2 &lt;- data.frame(id2=1:10,NUM_AIH=sample(letters,10))join_test &lt;- dplyr::full_join(dataset1, dataset2, by = c("N_AIH" = "NUM_AIH"), keep = TRUE)。我错了吗?
  • @Elia 不,你没有错。你说的对。你应该把这个作为我猜的答案发布
  • 我认为 OP 必须提供可重现的示例或 dput 数据样本,以确保可能的答案满足她的需求

标签: r join dplyr merge


【解决方案1】:
library(tidyverse)

dataset1 <- tibble(N_AIH = seq(5))
dataset1
#> # A tibble: 5 x 1
#>   N_AIH
#>   <int>
#> 1     1
#> 2     2
#> 3     3
#> 4     4
#> 5     5
dataset2 <- tibble(NUM_AIH = seq(3))
dataset2
#> # A tibble: 3 x 1
#>   NUM_AIH
#>     <int>
#> 1       1
#> 2       2
#> 3       3

joined <-
  full_join(dataset1, dataset2, by = c("N_AIH" = "NUM_AIH"), keep = TRUE)
joined
#> # A tibble: 5 x 2
#>   N_AIH NUM_AIH
#>   <int>   <int>
#> 1     1       1
#> 2     2       2
#> 3     3       3
#> 4     4      NA
#> 5     5      NA

# observations present in both datasets
inner_join(dataset1, dataset2, by = c("N_AIH" = "NUM_AIH"), keep = TRUE) %>%
  distinct(N_AIH, .keep_all = TRUE)
#> # A tibble: 3 x 2
#>   N_AIH NUM_AIH
#>   <int>   <int>
#> 1     1       1
#> 2     2       2
#> 3     3       3

# Obs that were in dataset 1 but weren't in dataset2 
anti_join(dataset1, dataset2, by = c("N_AIH" = "NUM_AIH"))
#> # A tibble: 2 x 1
#>   N_AIH
#>   <int>
#> 1     4
#> 2     5

# Obs that were in dataset 2 but weren't in dataset1
anti_join(dataset2, dataset1, by = c("NUM_AIH" = "N_AIH"))
#> # A tibble: 0 x 1
#> # … with 1 variable: NUM_AIH <int>

reprex package 创建于 2021-10-04 (v2.0.1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 2017-04-09
    • 1970-01-01
    • 2013-02-05
    相关资源
    最近更新 更多