我希望得到所有超过第一个"."的角色.如果有的话.否则,我想找回相同的字符("8" - >"8").
例:
v<-c("7.7.4","8","12.6","11.5.2.1")
我想得到这样的东西:
[1] "7 "8" "12" "11"
我的想法是将每个元素拆分为"." 然后只进行第一次拆分.我找不到有效的解决方案......
您可以使用 sub
sub("\\..*", "", v) #[1] "7" "8" "12" "11"
或几个stringi
选项:
library(stringi) stri_replace_first_regex(v, "\\..*", "") #[1] "7" "8" "12" "11" # extract vs. replace stri_extract_first_regex(v, "[^\\.]+") #[1] "7" "8" "12" "11"
如果您想使用拆分方法,这些方法将起作用:
unlist(strsplit(v, "\\..*")) #[1] "7" "8" "12" "11" # stringi option unlist(stri_split_regex(v, "\\..*", omit_empty=TRUE)) #[1] "7" "8" "12" "11" unlist(stri_split_fixed(v, ".", n=1, tokens_only=TRUE)) unlist(stri_split_regex(v, "[^\\w]", n=1, tokens_only=TRUE))
sub
使用捕获组专门针对主要角色的其他变体:
sub("(\\w+).+", "\\1", v) # \w matches [[:alnum:]_] (i.e. alphanumerics and underscores) sub("([[:alnum:]]+).+", "\\1", v) # exclude underscores # variations on a theme sub("(\\w+)\\..*", "\\1", v) sub("(\\d+)\\..*", "\\1", v) # narrower: \d for digits specifically sub("(.+)\\..*", "\\1", v) # broader: "." matches any single character # stringi variation just for fun: stri_extract_first_regex(v, "\\w+")