![](/img/trans.png)
[英]In R, how can I match the first 3 characters of values from 2 different columns
[英]How can I get the elements with a match on the first two characters
例如,我觀察到以下數據
[1] "1.1" "1.2" "1.3" "1.4" "1.5" "1.6" "1.7" "1.8" "1.9"
[10] "1.10" "1.11" "1.12" "1.13" "1.14" "2.1" "2.2" "2.3" "2.4"
[19] "2.5" "2.6" "2.7" "2.8" "2.9" "2.10" "2.11" "2.12" "2.13"
[28] "2.14" "3.1" "3.2" "3.3" "3.4" "3.5" "3.6" "3.7" "3.8"
[37] "3.9" "3.10" "3.11" "3.12" "3.13" "3.14" "4.1" "4.2" "4.3"
[46] "4.4" "4.5" "4.6" "4.7" "4.8" "4.9" "4.10" "4.11" "4.12"
[55] "4.13" "4.14" "5.1" "5.2" "5.3" "5.4" "5.5" "5.6" "5.7"
[64] "5.8" "5.9" "5.10" "5.11" "5.12" "5.13" "5.14" "6.1" "6.2"
[73] "6.3" "6.4" "6.5" "6.6" "6.7" "6.8" "6.9" "6.10" "6.11"
[82] "6.12" "6.13" "6.14" "7.1" "7.2" "7.3" "7.4" "7.5" "7.6"
[91] "7.7" "7.8" "7.9" "7.10" "7.11" "7.12" "7.13" "7.14" "8.1"
[100] "8.2" "8.3" "8.4" "8.5" "8.6" "8.7" "8.8" "8.9" "8.10"
[109] "8.11" "8.12" "8.13" "8.14" "9.1" "9.2" "9.3" "9.4" "9.5"
[118] "9.6" "9.7" "9.8" "9.9" "9.10" "9.11" "9.12" "9.13" "9.14"
[127] "10.1" "10.2" "10.3" "10.4" "10.5" "10.6" "10.7" "10.8" "10.9"
[136] "10.10" "10.11" "10.12" "10.13" "10.14" "11.1" "11.2" "11.3" "11.4"
[145] "11.5" "11.6" "11.7" "11.8" "11.9" "11.10" "11.11" "11.12" "11.13"
[154] "11.14" "12.1" "12.2" "12.3" "12.4" "12.5" "12.6" "12.7" "12.8"
[163] "12.9" "12.10" "12.11" "12.12" "12.13" "12.14" "13.1" "13.2" "13.3"
[172] "13.4" "13.5" "13.6" "13.7" "13.8" "13.9" "13.10" "13.11" "13.12"
[181] "13.13" "13.14" "14.1" "14.2" "14.3" "14.4" "14.5" "14.6" "14.7"
[190] "14.8" "14.9" "14.10" "14.11" "14.12" "14.13" "14.14"
我想 grep 以“1.”開頭的元素。 我用 grep() 嘗試了幾次,但最終總是得到帶有“11”的元素。 也。 如果我在“\”上使用 strsplit 我會得到一份清單,這會使事情變得更加復雜。 然后我嘗試使用 which() 函數進行精確匹配,但我只需要對前兩個字符進行精確匹配。 例如,我不關心“1.”中的第二個數字。 我敢打賭有一種復雜的方法可以解決這個問題,但我就是做不到……
你需要逃避.
兩次!
grep('^1\\.', x)
自.
是正則表達式中的特殊字符,如果需要句點,則需要在正則表達式中將其轉義。 然后因為\
是 R 中的一個特殊字符,它也需要轉義。
我發現使用角色類可以幫助擺脫逃避憤怒:
x <- do.call("paste",c(expand.grid(1:14,1:14),sep="."))
grep("^[1][.]",x,value=T)
[1] "1.1" "1.2" "1.3" "1.4" "1.5" "1.6" "1.7" "1.8" "1.9" "1.10"
[11] "1.11" "1.12" "1.13" "1.14"
開頭的插入符號 ( ^
) 確保我們僅在表達式的開頭匹配。
假設dat
是你的數據集
dat <- c("1.1","1.2","1.3","1.4","1.5","1.6","1.7","1.8","1.9","1.10","1.11","1.12","1.13","1.14","2.1","2.2","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","3.1","3.2","3.3","3.4","3.5","3.6","3.7","3.8","3.9","3.10","3.11","3.12","3.13","3.14","4.1","4.2","4.3","4.4","4.5","4.6","4.7","4.8","4.9","4.10","4.11","4.12","4.13","4.14","5.1","5.2","5.3","5.4","5.5","5.6","5.7","5.8","5.9","5.10","5.11","5.12","5.13","5.14","6.1","6.2","6.3","6.4","6.5","6.6","6.7","6.8","6.9","6.10","6.11","6.12","6.13","6.14","7.1","7.2","7.3","7.4","7.5","7.6","7.7","7.8","7.9","7.10","7.11","7.12","7.13","7.14","8.1","8.2","8.3","8.4","8.5","8.6","8.7","8.8","8.9","8.10","8.11","8.12","8.13","8.14","9.1","9.2","9.3","9.4","9.5","9.6","9.7","9.8","9.9","9.10","9.11","9.12","9.13","9.14","10.1","10.2","10.3","10.4","10.5","10.6","10.7","10.8","10.9","10.10","10.11","10.12","10.13","10.14","11.1","11.2","11.3","11.4","11.5","11.6","11.7","11.8","11.9","11.10","11.11","11.12","11.13","11.14","12.1","12.2","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","13.1","13.2","13.3","13.4","13.5","13.6","13.7","13.8","13.9","13.10","13.11","13.12","13.13","13.14","14.1","14.2","14.3","14.4","14.5","14.6","14.7","14.8","14.9","14.10","14.11","14.12","14.13","14.14")
一種選擇,利用它們是數字這一事實
as.numeric(dat) > 1 & as.numeric(dat) < 2
此外, stringr
包包裝了正則表達式函數,以便於使用
library(stringr)
str_detect(dat, "^1\\.")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.