【问题标题】:Filter dataframe on multiple column combinations in R在 R 中的多列组合上过滤数据框
【发布时间】:2019-09-26 12:05:59
【问题描述】:

我有一个数据框,我想根据不同数据框中的信息对其进行子集化。

例如,我有一个 x、y 和 z 值不同的 df:

df <- expand.grid(x=1:5,y=10:12,z=c('a','b'))

我想从这个 df 中对所有具有 y=10 和 z=a 或 y=11 和 z=a 的值进行子集化。我用于子集的信息在数据框中:

filter_vector2 <- expand.grid(y=10:11,z='a')
> filter_vector2
   y z
1 10 a
2 11 a

当我根据一列的内容进行过滤时,我通常会创建一个向量并使用 %in% 函数:

filter_vector1 <- c(y=10,y=11)

filtered_data <-  df %>%
    filter(y %in% filter_vector1)

但是,如何根据 filter_vector2 中的列组合应用过滤器选择?

【问题讨论】:

  • 只需 mergejoin,因为两者实际上都是数据帧。
  • filtered_data % inner_join(filter_vector2) 成功了!

标签: r dplyr


【解决方案1】:

您也可以在一行中使用data.table

library(data.table)
filtered_vector <- setDT(df)[which(paste0(y,z) %in% paste0(filter_vector1,filter_vector2$z)),]

filtered_vector
    x  y z
 1: 1 10 a
 2: 2 10 a
 3: 3 10 a
 4: 4 10 a
 5: 5 10 a
 6: 1 11 a
 7: 2 11 a
 8: 3 11 a
 9: 4 11 a
10: 5 11 a

【讨论】:

    猜你喜欢
    • 2022-10-07
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    相关资源
    最近更新 更多