在 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
结尾或列在包含sex
或eth
的列表中?
预期输出
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 中过滤具有多个条件名称匹配的数据框的主要内容,如果未能解决你的问题,请参考以下文章