按 R 中字符的位置子集字符串

Subset String by Position of Characters in R

对于 R 中一个相对简单的问题,我似乎找不到优雅的解决方案。我想根据位置向量从字符串中提取字符。例如,如何从 example.string 中提取第 1 个、第 3 个和第 5 个字符? substr 无始无终不行。

example.string <- "ApplesAndCookies"
characters.wanted <- c(1,3,5)

预期输出为: Ape

我可以设计一个循环或函数来执行此操作,但必须有更简单的方法...

单个字符串的可能解决方案。

example.string <- "ApplesAndCookies"
characters.wanted <- c(1,3,5)

paste(unlist(strsplit(example.string, ''))[characters.wanted], collapse = '')
# ---------------------------------------------------------------------------
[1] "Ape"

字符串向量的扩展。

example.string <- c("ApplesAndCookies","ApplesAndCookies","ApplesAndCookies")
characters.wanted <- c(1,3,5)

sapply(strsplit(example.string, ''), function(x) {
  paste(x[characters.wanted], collapse = '')
})
# ---------------------------------------------------------------------------
[1] "Ape" "Ape" "Ape"

您可以使用:

example.string <- "ApplesAndCookies"
characters.wanted <- c(1,3,5)

paste(strsplit(example.string, "")[[1]][characters.wanted], collapse="")

输出:

[1] "Ape"

对于单个字符串和单个向量,您可以

rawToChar(charToRaw(example.string)[characters.wanted])

输出

[1] "Ape"

对于字符向量,您可以

sapply(your_vector, function(x, i) rawToChar(charToRaw(x)[i]), characters.wanted)

包“Biostrings”中有一个函数允许您执行此操作。

你首先要install BiocManger

if (!require("BiocManager", quietly = TRUE))
     install.packages("BiocManager")
BiocManager::install(version = "3.14")

接下来安装并加载包“Biostrings”

BiocManager::install("Biostrings")
library(Biostrings)

然后您可以使用函数 letter() 对您的字符串进行子集化。例如:

x <- "abcde"
letter(x, 1:2)

"ab"