我找不到一个优雅的解决方案来解决R中一个相对简单的问题。我想根据位置向量从字符串中提取字符。例如,如何从example.string
中提取第1、3和5个字符?substr
没有起始和结束位置会无法工作。
example.string <- "ApplesAndCookies"
characters.wanted <- c(1,3,5)
期望的输出将是:
Ape
我可以设计一个循环或函数来完成这个任务,但一定有更简单的方法...
对于一个字符串和一个向量,您可以
rawToChar(charToRaw(example.string)[characters.wanted])
输出
[1] "Ape"
对于一个字符向量,您可以
sapply(your_vector, function(x, i) rawToChar(charToRaw(x)[i]), characters.wanted)
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"
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"
您可以使用以下方法:
example.string <- "ApplesAndCookies"
characters.wanted <- c(1,3,5)
paste(strsplit(example.string, "")[[1]][characters.wanted], collapse="")
输出:
[1] "Ape"
sapply
,对吗?例如:sapply(vector.of.strings, function(x) paste(unlist(strsplit(x,""))[chars.to.keep], collapse = ""))
。那是最好的方式吗? - Alex Krohnsapply
,则无需额外调用unlist()
。 - Dion Groothof