For example I observe the follwing data
例如,我观察了以下数据
[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"
I would like to grep the elements which start with "1.". I tried several attempts with grep() but I always end up getting the elements with "11." too. If I use strsplit on "\." ill get a list which makes things even more complicated. Then i tried the which() function for exact matching but i need only a exact match on the first two characters. For instance i dont care about the second number in "1.". I bet theres a sophisticated way to solve this but i just cant get it...
我想grep以“1”开头的元素。我尝试了几次grep()尝试,但我总是得到“11”的元素。太。如果我在“\”上使用strsplit。生病得到一个让事情变得更复杂的清单。然后我尝试使用which()函数进行精确匹配,但我只需要对前两个字符进行精确匹配。例如,我不关心“1”中的第二个数字。我打赌这是解决这个问题的一种复杂的方法,但我不能得到它......
3 个解决方案
#1
2
You need to escape the .
twice!
你需要逃避。两次!
grep('^1\\.', x)
Since .
is a special character in regular expressions you need to escape it in the regex if you want a period. Then since \
is a special character in R it also needs an escape.
自从。是正则表达式中的一个特殊字符,如果你想要一个句点,你需要在正则表达式中将其转义。因为\是R中的一个特殊字符,它还需要一个逃脱。
#2
2
I find that using character classes can help escape from escape rage:
我发现使用字符类可以帮助逃避逃避愤怒:
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"
The caret (^
) at the start ensures that we match only at the start of the expression.
开头的插入符号(^)确保我们仅在表达式的开头匹配。
#3
1
Assuming that dat
is your your data set
假设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")
One option, using the fact that they are numbers
一种选择,使用它们是数字的事实
as.numeric(dat) > 1 & as.numeric(dat) < 2
also, the stringr
package wraps the regex functions for slightly easier use
此外,stringr包包装正则表达式函数以便稍微使用
library(stringr)
str_detect(dat, "^1\\.")
#1
2
You need to escape the .
twice!
你需要逃避。两次!
grep('^1\\.', x)
Since .
is a special character in regular expressions you need to escape it in the regex if you want a period. Then since \
is a special character in R it also needs an escape.
自从。是正则表达式中的一个特殊字符,如果你想要一个句点,你需要在正则表达式中将其转义。因为\是R中的一个特殊字符,它还需要一个逃脱。
#2
2
I find that using character classes can help escape from escape rage:
我发现使用字符类可以帮助逃避逃避愤怒:
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"
The caret (^
) at the start ensures that we match only at the start of the expression.
开头的插入符号(^)确保我们仅在表达式的开头匹配。
#3
1
Assuming that dat
is your your data set
假设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")
One option, using the fact that they are numbers
一种选择,使用它们是数字的事实
as.numeric(dat) > 1 & as.numeric(dat) < 2
also, the stringr
package wraps the regex functions for slightly easier use
此外,stringr包包装正则表达式函数以便稍微使用
library(stringr)
str_detect(dat, "^1\\.")