R gsub数和变量的空间
使用gsub,我可以从这些person变量中删除R gsub数和变量的空间,r,gsub,R,Gsub,使用gsub,我可以从这些person变量中删除#,但是我尝试删除随机数的方式是不正确的。我也想删除的空间后,人名,但保持空间在中间的名称。 c('mike smith #99','John johnson #2','jeff johnson #50') -> person c(1:99) -> numbers person <- gsub("#", "", person, fixed=TRUE) # MY ISSUE person <- gsub(numbers,
#
,但是我尝试删除随机数的方式是不正确的。我也想删除的空间后,人名,但保持空间在中间的名称。
c('mike smith #99','John johnson #2','jeff johnson #50') -> person
c(1:99) -> numbers
person <- gsub("#", "", person, fixed=TRUE)
# MY ISSUE
person <- gsub(numbers, "", person, fixed=TRUE)
df <- data.frame(PERSON = person)
预期成果:
PERSON
mike smith
John johnson
jeff johnson
我们可以使用
paste
pat <- paste0("\\s*#(", paste(numbers, collapse = "|"), ")")
gsub(pat, "", person)
#[1] "mike smith" "John johnson" "jeff johnson"
或者另一种选择是
unlist(strsplit(person, "\\s*#\\d+"))
注:以上均为baser
方法
以下是另一种模式作为替代:
> gsub("(\\.*)\\s+#.*", "\\1", person)
[1] "mike smith" "John johnson" "jeff johnson"
在上面的正则表达式中,(\\.*)
将匹配空格(\\s+
)前面的任何字符的子组,后跟\
符号,后跟任何字符。然后\\1
指示gsub
应使用该子组(\\\.*)
获得所需输出的更简单方法是:
> gsub("\\s+#.*$", "", person)
[1] "mike smith" "John johnson" "jeff johnson"
上面的正则表达式\\s+\\.*$
表示所有由空格(\\s+
)、\\
符号和字符串结尾(\.$
)之前的所有内容都应该删除
使用str\u从stringr包中提取所有
> library(stringr)
> str_extract_all(person, "[[a-z]]+", simplify = TRUE)
[,1] [,2]
[1,] "mike" "smith"
[2,] "ohn" "johnson"
[3,] "jeff" "johnson"
您还可以使用:
library(stringi)
stri_extract_all(person, regex="[[a-z]]+", simplify=TRUE)
这也可以通过read.table
来实现
read.table(text = person, sep = "#", strip.white = TRUE,
as.is = TRUE, col.names = "PERSON")
给予:
PERSON
1 mike smith
2 John johnson
3 jeff johnson
删除字符串末尾任何非(小写)字母字符序列的替代方法
gsub("[^a-z]+$", "", person)
[1] "mike smith" "John johnson" "jeff johnson"
如果要允许所有大写或以大写字符结尾的单词
gsub("[^a-zA-Z]+$", "", person)
有些名称可能以
结尾:
gsub("[^a-zA-Z.]+$", "", person)
我选择了gsub选项,因为这是我第一次看到它,谢谢你的其他答案。您能告诉我们您在上面一行中所指的参数是什么吗?我不确定您对“参数”的要求是什么,在每个函数调用中,参数都是显式写入的。(\\.\\s+\\.*和\\1是否需要捕获,因为这样会减慢速度。为什么不直接使用sub(“\\s+#.*”,“”,person)
?不需要gsub
,sub
就足够了,在本例中,如果在模式中包含$
,通常也可以检查答案
gsub("[^a-z]+$", "", person)
[1] "mike smith" "John johnson" "jeff johnson"
gsub("[^a-zA-Z]+$", "", person)
gsub("[^a-zA-Z.]+$", "", person)
c('mike smith #99','John johnson #2','jeff johnson #50') -> person
sub("\\s+#.*", "", person)
[1] "mike smith" "John johnson" "jeff johnson"