簡體   English   中英

在R中使用dplyr :: contains()和dplyr :: select()的正負子集

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM