在 R dplyr 中过滤具有多个条件名称匹配的数据框

Posted

技术标签:

【中文标题】在 R dplyr 中过滤具有多个条件名称匹配的数据框【英文标题】:filter dataframe with multiple conditions name matching in R dplyr 【发布时间】:2022-01-23 04:48:29 【问题描述】:
type sex eth  a_t a_tm b_tm c_tm d_tm e_tm 
1    m   a    0      0    0    1    1    0
0    f   b    1      1    0    0    1    1
0    m   a    0      0    0    1    1    1
1    f   a    1      1    1    1    0    0
0    f   c    1      0    0    1    0    1

如何使用dplyr 选择列,其中列以_tm 结尾或列在包含sexeth 的列表中?

预期输出

sex eth  a_tm b_tm c_tm d_tm e_tm 
m   a    0    0    1    1    0
f   b    1    0    0    1    1
m   a    0    0    1    1    1
f   a    1    1    1    0    0
f   c    0    0    1    0    1

我想在dplyr 中执行此操作而不使用grepl...这可能吗?

【问题讨论】:

然后改用grep()。它满足你的条件。 【参考方案1】:

可以使用select-helpers - ends_with in select 来完成

library(dplyr)
df1 %>% 
    select(sex, eth, ends_with('_tm'))

-输出

   sex eth a_tm b_tm c_tm d_tm e_tm
1   m   a    0    0    1    1    0
2   f   b    1    0    0    1    1
3   m   a    0    0    1    1    1
4   f   a    1    1    1    0    0
5   f   c    0    0    1    0    1

其他选项包括matches("_tm$") 代替ends_with,即如果我们使用regex,则可以在matches - matches("^(sex|eth)$|_tm$") 中完成所有操作,其中我们使用模式来匹配“性别”或( |) 'eth' 从字符串的开头 (^) 到结尾 ($) 或 (|) 列中字符串结尾处的子字符串 '_tm' ($)名字

df1 %>%
    select(matches("^(sex|eth)$|_tm$"))
  sex eth a_tm b_tm c_tm d_tm e_tm
1   m   a    0    0    1    1    0
2   f   b    1    0    0    1    1
3   m   a    0    0    1    1    1
4   f   a    1    1    1    0    0
5   f   c    0    0    1    0    1

数据

df1 <- structure(list(type = c(1L, 0L, 0L, 1L, 0L), sex = c("m", "f", 
"m", "f", "f"), eth = c("a", "b", "a", "a", "c"), a_t = c(0L, 
1L, 0L, 1L, 1L), a_tm = c(0L, 1L, 0L, 1L, 0L), b_tm = c(0L, 0L, 
0L, 1L, 0L), c_tm = c(1L, 0L, 1L, 1L, 1L), d_tm = c(1L, 1L, 1L, 
0L, 0L), e_tm = c(0L, 1L, 1L, 0L, 1L)), class = "data.frame", 
row.names = c(NA, 
-5L))

【讨论】:

以上是关于在 R dplyr 中过滤具有多个条件名称匹配的数据框的主要内容,如果未能解决你的问题,请参考以下文章

R:基于多个条件的两个数据帧的子集

使用 dplyr 过滤 postgreSQL 数据库中的多个值

R语言dplyr包filter函数通过逻辑条件过滤数据实战

在 dplyr 中按组过滤多个条件的条件 IF

总结并列出 dplyr 中的自定义索引

R中的条件数据框突变与magrittr和dplyr