3

Excel 中有名为leftright和的函数mid,您可以在其中从单元格中提取部分条目。例如,=left(A1, 3), 将返回单元格 A1 中最左边的 3 个字符,并从单元格 A1=mid(A1, 3, 4)中的第三个字符开始,并为您提供编号 3 - 6 的字符。R 中是否有类似的函数或类似的直接方法可以做到这一点?

作为一个简化的示例问题,我想取一个向量

sample<-c("TRIBAL","TRISTO", "RHOSTO", "EUGFRI", "BYRRAT")

并创建 3 个新向量,其中包含每个条目中的前 3 个字符、每个条目中的中间 2 个字符以及每个条目中的最后 4 个字符。

Excel 没有函数(我知道)的一个稍微复杂的问题是如何使用每个条目的第一个、第三个和第五个字符创建一个新向量。

4

1 回答 1

10

您正在寻找函数substr或其近亲substring

主角很直接:

substr(sample, 1, 3)
[1] "TRI" "TRI" "RHO" "EUG" "BYR"

在定义的位置提取一些字符也是如此:

substr(sample, 2, 3)
[1] "RI" "RI" "HO" "UG" "YR"

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

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

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

还有你最后的“复杂”问题:

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" 
于 2012-08-19T18:35:01.567 回答