从R中的向量中的条目中提取字符

Jot*_*ota 3 r extract

Excel中有一些函数称为left,rightmid,您可以从单元格中提取部分条目.例如=left(A1, 3),将返回单元格A1的3个最左边的字符,=mid(A1, 3, 4)将开始在单元格A1中的第三个字符,并给你的字符数3 - 6是R中有类似的功能或类似的简单方法可以做到这一点?

作为简化的示例问题,我想采用矢量

sample<-c("TRIBAL","TRISTO", "RHOSTO", "EUGFRI", "BYRRAT")
Run Code Online (Sandbox Code Playgroud)

并创建3个新向量,每个条目包含前3个字符,每个条目中间2个字符,每个条目中最后4个字符.

(我知道)Excel没有函数的一个稍微复杂的问题是如何使用每个条目中的第1个,第3个和第5个字符创建一个新的向量.

And*_*rie 10

您正在寻找该功能substr或其近亲substring:

主角是直截了当的:

substr(sample, 1, 3)
[1] "TRI" "TRI" "RHO" "EUG" "BYR"
Run Code Online (Sandbox Code Playgroud)

所以在定义的位置提取一些字符:

substr(sample, 2, 3)
[1] "RI" "RI" "HO" "UG" "YR"
Run Code Online (Sandbox Code Playgroud)

要获取尾随字符,您有两种选择:

substr(sample, nchar(sample)-3, nchar(sample))
[1] "IBAL" "ISTO" "OSTO" "GFRI" "RRAT"

substring(sample, nchar(sample)-3)
[1] "IBAL" "ISTO" "OSTO" "GFRI" "RRAT"
Run Code Online (Sandbox Code Playgroud)

而你最后的"复杂"问题:

characters <- function(x, pos){
  sapply(x, function(x)
    paste(sapply(pos, function(i)substr(x, i, i)), collapse=""))
}
characters(sample, c(1,3,5))
TRIBAL TRISTO RHOSTO EUGFRI BYRRAT 
 "TIA"  "TIT"  "ROT"  "EGR"  "BRA" 
Run Code Online (Sandbox Code Playgroud)

  • @mrdwab虽然我同意你的意见,但鉴于基本R中有超过1000个函数,有时很难不会无意中为变量使用函数名.请记住,对于无关紧要的R,因为你没有重新定义`sample()`函数. (3认同)