首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中使用dplyr::in ()和dplyr::select()进行正负子设置

在R中使用dplyr::in ()和dplyr::select()进行正负子设置
EN

Stack Overflow用户
提问于 2017-10-01 18:35:38
回答 1查看 1.7K关注 0票数 2

我正试图使用dplyr::select()和dplyr::achieve ()的组合来实现正子设置,目标是通过多个字符串匹配进行子集。

最小的工作示例:从df1开始并执行负子设置时,我会按照预期生成df2。相反,在尝试对df1进行正子设置时,我生成df3 (没有列),而我本来希望得到类似df4的东西。谢谢你的帮助。

代码语言:javascript
复制
df1 <- data.frame("ppt_paint"=c(45,98,23),"het_heating"=c(1,1,2) ,"orm_wood"=c("QQ","OA","BB"), "hours"=c(4,6,4), "distance"=c(23,65,21))
df2 <- df1 %>% select(-contains("ppt_")) %>% select(-contains("het_")) %>% select(-contains("orm_"))
df3 <- df1 %>% select(contains("ppt_")) %>% select(contains("het_")) %>% select(contains("orm_")) 
df4 <- data.frame("ppt_paint"=c(45,98,23),"het_heating"=c(1,1,2) ,"orm_wood"=c("QQ","OA","BB"))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-01 18:53:46

想一想(并看看得到的data.frame)之后发生了什么:df1 %>% select(contains("ppt_"))。如前所述,它只保留了唯一包含"ppt_"的列。进一步的表达式不能像您预期的那样工作,因为其他列,无论您为select提供什么,都“不再存在”。

您可以保留相同的想法,但在同一个select中合并您的三个键:

代码语言:javascript
复制
df1 %>% select(matches("ppt_"), matches("het_"), matches("orm_"))
  ppt_paint het_heating orm_wood
1        45           1       QQ
2        98           1       OA
3        23           2       BB

或者,您可以使用接受正则表达式的matches来完成此操作:

代码语言:javascript
复制
df1 %>% select(matches(c("ppt_|het_|orm_")))
  ppt_paint het_heating orm_wood
1        45           1       QQ
2        98           1       OA
3        23           2       BB

顺便说一句,你也可以用它来缩短你的“负面”索引:

代码语言:javascript
复制
df1 %>% select(-matches("ppt_|het_|orm_"))
  hours distance
1     4       23
2     6       65
3     4       21
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46515598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档