抱歉,如果之前已回答過此問題。我努力尋找對我有幫助的答案。
假設我有一個資料框:-
Name <- c('P1','P2;P3','P4','P5','P6;P7', "P8", "P9")
Count <- c(15,3,10,4,3,11,9)
df <- data.frame(Name, Count)
我想過濾列名稱中的文本與下面的串列匹配的行:-
list <- c("P1", "P2", "P6", "P9")
請注意,串列的值少于 df 中的行數。生成的資料框應為:-
| 姓名 | 數數 |
|---|---|
| P1 | 15 |
| P2;P3 | 3 |
| P6;P7 | 3 |
| P9 | 9 |
我嘗試的每一種方式,R 都無法識別用分號分隔的值,并將它們排除在過濾程序之外。我更喜歡使用基于 Tidyverse 的函式,但任何幫助都會得到很大的幫助。
非常感謝,安迪
uj5u.com熱心網友回復:
你可以這樣做:
df %>% filter(sapply(Name, function(x) any(stringr::str_detect(x, list))))
#> Name Count
#> 1 P1 15
#> 2 P2;P3 3
#> 3 P6;P7 3
#> 4 P9 9
或完整的 tidyverse 成語:
library(tidyverse)
df %>% filter(map_lgl(Name, ~any(str_detect(.x, list))))
#> Name Count
#> 1 P1 15
#> 2 P2;P3 3
#> 3 P6;P7 3
#> 4 P9 9
作為一個強制性的附帶說明,呼叫變數是不好的做法list,因為這與函式的名稱沖突list
uj5u.com熱心網友回復:
拆分名稱并與串列進行比較:
df[ sapply(strsplit(df$Name, ";"), function(i) any(i %in% list)), ]
或grepl與OR - "|":
df[ grepl(paste(list, collapse = "|"), df$Name), ]
# Name Count
# 1 P1 15
# 2 P2;P3 3
# 5 P6;P7 3
# 7 P9 9
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/448793.html
上一篇:在Java中替換部分字串的問題
下一篇:計算兩個變數之間的單詞匹配
