【问题标题】:Extract rows with same value across different dataframes在不同的数据帧中提取具有相同值的行
【发布时间】:2021-09-29 23:59:25
【问题描述】:

我有下面的 df files,它包含很多行。

# A tibble: 2,320,079 x 2
   `files$File`                      `files$ID`
   <fct>                                 <int>
 1 oa_package/e6/58/176545.tar.gz     12929205
 2 oa_package/36/ba/176546.tar.gz     12929206
 3 oa_package/a9/0c/176547.tar.gz     12929207
 4 oa_package/46/44/176548.tar.gz     12938460
 5 oa_package/81/5e/193604.tar.gz     12975658
 6 oa_package/a5/8c/193605.tar.gz     12975657
 7 oa_package/f6/9e/193606.tar.gz           NA
 8 oa_package/93/a3/193607.tar.gz           NA
 9 oa_package/34/af/212687.tar.gz     14551903
10 oa_package/c5/d6/212688.tar.gz           NA
# … with 2,320,069 more rows

我还有一个 df ID_1,它包含与 'files$ID' 相同的数据类型,但它只有 186 行。

# A tibble: 186 x 1
   ID      
   <int>   
 1 30237023
 2 12929205
 3 31475741
 4 32319557
 5 33842337
 6 28476099
 7 30103771
 8 12938460
 9 26417675
10 14551903
# … with 176 more rows

我的问题是:如何提取files 中的所有行,其中'files$ID' 的值等于ID_1 df 中的ID 行?

作为第一步,我尝试改变 files 以包含 ID 但这不起作用,因为观察次数必须相等。

files %>%
     mutate(row_3 = ID_1$ID)

结果是这样的:

  `files$File`                      `files$ID`
   <fct>                                 <int>
 1 oa_package/e6/58/176545.tar.gz     12929205
 4 oa_package/46/44/176548.tar.gz     12938460
 9 oa_package/34/af/212687.tar.gz     14551903

【问题讨论】:

    标签: r extract


    【解决方案1】:

    我们可能需要在这里加入

    library(dplyr)
    files %>%
         inner_join(ID_1, by = c("files$ID" = "ID"))
    

    【讨论】:

    • 当我这样做时,我只是得到了具有相同行数的原始 files 数据框
    • @aurelius_37809 你需要inner_join
    • @aurelius_37809 您确定连接列没有重复项。我将其更改为 right_join。当有重复时,它会一次匹配多行
    • inner_join 工作,谢谢!意识到变量类型在环境中实际上是不等价的
    • @aurelius_37809 在加入之前,只需将列类型更改为相同,以便by 不会抱怨
    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多