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

3
在Excel中有一些名为leftrightmid的函数,可以从单元格中提取部分条目。例如,=left(A1, 3)将返回单元格A1中最左边的3个字符,=mid(A1, 3, 4)将从单元格A1的第三个字符开始,并给出第3-6个字符。在R中是否有类似的函数或同样简单直接的方法呢?
作为一个简化的示例问题,我想使用一个向量。
sample<-c("TRIBAL","TRISTO", "RHOSTO", "EUGFRI", "BYRRAT")

创建3个新向量,分别包含每个条目的前3个字符、中间2个字符和最后4个字符。

一个稍微复杂一些的问题是Excel没有(我所知道的)函数可以解决如何创建一个新的向量,并从每个条目中选择第1、3和5个字符。


只是提醒一下,最好不要用base R中如sample(或cdf等)这样重要的函数名称来命名你的对象,这是一个好习惯。 - A5C1D2H2I1M1N2O1R2T1
1
@mrdwab 很好的评论,但这并不是很重要。请参见https://dev59.com/cG025IYBdhLWcg3wOzTX - Andrie
@Andrie,你在那个链接问题中给出了一系列很棒的答案(问题也很好)。对我来说,首要问题是可读性和调试,甚至是查看我一年前写的代码;但是,如果代码在一开始就被正确地记录或注释,那将会是一个较小的问题。 - A5C1D2H2I1M1N2O1R2T1
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" 

看到这里的这些“示例”让我感到非常不舒服! - A5C1D2H2I1M1N2O1R2T1
3
虽然我同意你的观点,但是在 R 基础函数库中有超过 1000 个函数,有时很难不小心将一个函数名用作变量名。请记住,对于 R 来说这并不重要,因为你没有重新定义 sample() 函数。 - Andrie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接