按 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”中有一个函数允许您执行此操作。
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"
对于 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”中有一个函数允许您执行此操作。
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"