【问题标题】:Extracting characters from entries in a vector in R从R中向量中的条目中提取字符
【发布时间】:2012-08-19 18:32:16
【问题描述】:

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 个字符创建一个新向量。

【问题讨论】:

  • 仅供参考,最好不要使用来自基本 R 的sample(或c,或df 等)等重要函数的名称来命名您的对象。跨度>
  • @mrdwab 很好的评论,但这真的没那么重要。见stackoverflow.com/q/6135868/602276
  • @Andrie,在那个链接的问题中提供了很好的答案(也很好的问题)。对我来说,想到的主要问题是可读性和调试,甚至是看我一年前写的一些代码;但是,如果代码一开始就被正确记录或注释,那将是较少的问题。

标签: r extract


【解决方案1】:

您正在寻找函数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" 

【讨论】:

  • 在这里看到这些samples 让我感到畏缩!
  • @mrdwab 虽然我同意你的观点,但鉴于基本 R 中有 1000 多个函数,有时很难不无意中为变量使用函数名称。请记住,这对 R 来说并不重要,因为您没有重新定义 sample() 函数。
猜你喜欢
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
相关资源
最近更新 更多