[英]Positive and negative subsetting using dplyr::contains() and dplyr::select() in R
我正在嘗試使用dplyr::select()
和dplyr :: contains()的組合來實現積極的子集,目標是通過多個字符串匹配來進行子集化。
最小的工作示例:從df1
開始並進行負子集設置時,我按預期生成df2
。 相反,當嘗試對df1
進行正子集設置時,當我期望像df4
這樣的東西時,會生成df3
(無列)。 謝謝你的幫助。
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"))
思考(並查看結果data.frame
)在以下情況后會發生什么: df1 %>% select(contains("ppt_"))
。 如所要求的,它僅保留包含"ppt_"
的唯一列。 進一步的表達式無法按您期望的那樣工作,因為其他列(無論您要select
內容如何)都不再存在。
你可以保持相同的想法,但在同一組合 select
你三把鑰匙:
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
接受正則表達式:
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
順便說一下,您也可以使用它來縮短“負”索引:
df1 %>% select(-matches("ppt_|het_|orm_"))
hours distance
1 4 23
2 6 65
3 4 21
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.