【问题标题】:Cannot pass a list to dplyr filter using %in%无法使用 %in% 将列表传递给 dplyr 过滤器
【发布时间】:2020-11-10 16:49:00
【问题描述】:

我无法使用 %in% 将列表传递给 dplyr 的 filter() 函数,我不知道为什么它不起作用。

我重现了以下问题:
我有两个数据集,xy

x 是一组原始 ID (O_ID) 和目标 ID (D_ID)。
x 中的单个O_ID 可以与多个D_ID's 关联。

yD_IDs 的一组系数。

我想获取与特定O_ID 关联的所有D_IDs,并获取与该D_ID 相关联的系数表。在下面的示例中,这意味着我想返回仅包含 gtst 行的 y 集。

示例代码

library(tidyverse)

# setup sample x dataframe
x <- data.frame("O_ID" = c("A1","A1","A2","B1","B1","B2"),
                "D_ID" = c("gt","st","hy","kl","st","nu"))
# setup sample y dataframe
y <- data.frame("ID" = c("gt","st","hy"),
                "coef_1" = c(2.6,1.8,6.7),
                "coef_2" = c(5.6,2.1,3.6))

# get D_ID's associated with O_ID == "A1"
x_A1 <- x %>%
          filter(O_ID == "A1") %>%
          select(D_ID) %>%
          as.list()

# FAILED STEP:
# get table of coefficients for D_IDs
y_A1 <- y %>%
          filter(ID %in% x_A1)

为什么我的最后一步不起作用?列表是传递信息的正确格式吗?

【问题讨论】:

    标签: r filter dplyr


    【解决方案1】:

    您需要pull 而不是as.list(),因为您想过滤vector 而不是list

    # get D_ID's associated with O_ID == "A1"
    x_A1 <- x %>%
      filter(O_ID == "A1") %>%
      select(D_ID) %>%
      pull()
    
    # get table of coefficients for D_IDs
    y_A1 <- y %>%
      filter(ID %in% x_A1)
    

    【讨论】:

    • 谢谢!像魅力一样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 2017-11-27
    • 1970-01-01
    相关资源
    最近更新 更多