【问题标题】:filter dataframe with multiple conditions name matching in R dplyr在 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()。它满足你的条件。

标签: r dplyr


【解决方案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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 2020-04-17
    • 1970-01-01
    • 2021-07-21
    • 2023-03-13
    • 2020-06-19
    • 1970-01-01
    • 2019-10-10
    相关资源
    最近更新 更多