Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用gsub在R中只保留向量中的第一个字符/数字?_R - Fatal编程技术网

如何使用gsub在R中只保留向量中的第一个字符/数字?

如何使用gsub在R中只保留向量中的第一个字符/数字?,r,R,基本上,我只想保留向量中的第一个字符,我知道这可以在substr中轻松完成,但我想知道如何在gsub中完成 比如说, codes <- c("02Q","4E (1)","4S (1)","A0","A2","A4") 谢谢你能行 sub("^(\\w).*$", "\\1", codes) #[1] "0" "4" "4" "A" "A" "A" 说明: ^:表示字符串的开头 \w:表示用括号捕获的字母数字项,然后将\\1作为替换参数进行检索 *:表示任何内容,0次或更多次 $:表示

基本上,我只想保留向量中的第一个字符,我知道这可以在substr中轻松完成,但我想知道如何在gsub中完成

比如说,

codes <- c("02Q","4E (1)","4S (1)","A0","A2","A4")
谢谢

你能行

sub("^(\\w).*$", "\\1", codes)
#[1] "0" "4" "4" "A" "A" "A"
说明:

^:表示字符串的开头 \w:表示用括号捕获的字母数字项,然后将\\1作为替换参数进行检索 *:表示任何内容,0次或更多次 $:表示字符串的结尾 你能行

sub("^(\\w).*$", "\\1", codes)
#[1] "0" "4" "4" "A" "A" "A"
说明:

^:表示字符串的开头 \w:表示用括号捕获的字母数字项,然后将\\1作为替换参数进行检索 *:表示任何内容,0次或更多次 $:表示字符串的结尾
似乎你只想保留第一个角色

gsub("(?<!^).", "", codes, perl=TRUE)
# [1] "0" "4" "4" "A" "A" "A"

似乎你只想保留第一个角色

gsub("(?<!^).", "", codes, perl=TRUE)
# [1] "0" "4" "4" "A" "A" "A"

旁注:\w为[a-zA-Z0-9],包括允许字符中的下划线。只有字母数字字符[:alnum:]才是better@Tensibai,很好,但是字符串的第一个字符中可以包含的内容有点流行,我以为它只适用于数字,但是你可以有一个字母,为什么不呢-旁注:\w为[a-zA-Z0-9],包括允许字符中的下划线。只有字母数字字符[:alnum:]才是better@Tensibai,很好,但是字符串的第一个字符中可以包含的内容有点流行,我以为它只适用于数字,但是你可以有一个字母,为什么不呢-我认为这只是经典的XY问题。如果你有一个简单而有效的解决方案,为什么要把它复杂化呢?我敢打赌子循环码,1L,1L,当然。内部子循环码,1L,1L将在速度和简单性方面击败任何正则表达式。我认为这只是经典的XY问题。如果你有一个简单而有效的解决方案,为什么要把它复杂化呢?我打赌子循环码,1L,1L,当然。内部子循环码,1L,1L将在速度和简单性上击败任何正则表达式。
> sub("(?!^.).*", "", codes, perl=T)
[1] "0" "4" "4" "A" "A" "A"
> sub("\\B.*", "", codes, perl=T)
[1] "0" "4" "4" "A" "A" "A"