我有以下一組字串:
core_string <- "AFFVQTCRE"
mask_string <- "*KKKKKKKK"
我想做的是core_string用mask_string. 每當*與 中的字符重合時core_string,我們將保留該字符,否則替換它。
所以想要的結果是:
AKKKKKKKK
其他示例
core_string <- "AFFVQTCRE"
mask_string <- "*KKKK*KKK"
# result AKKKKTKKK
兩個字串的長度始終相同。我怎么能用 R 做到這一點?
uj5u.com熱心網友回復:
這是一個輔助函式,可以做到這一點
apply_mask <- function(x, mask) {
unlist(Map(function(z, m) {
m[m=="*"] <- z[m=="*"]
paste(m, collapse="")
}, strsplit(x, ""), strsplit(mask, "")))
}
基本上,您只需將字串拆分為字符并替換具有“*”的字符,然后將字串重新粘貼在一起。
我使用Map來確保函式仍然在輸入上進行矢量化。例如
core_string <- c("AFFVQTCRE", "ABCDEFGHI")
mask_string <- "*KKKK*KKK"
apply_mask(core_string, mask_string)
# [1] "AKKKKTKKK" "AKKKKFKKK"
uj5u.com熱心網友回復:
regmatches替換形式<-在這里可以很方便:
regmatches(core_string, gregexpr("K", mask_string)) <- "K"
core_string
#[1] "AKKKKKKKK"
如果它是字符的 1:1 匹配而不是常量,則必須稍微更改一下:
ss <- strsplit(mask_string, "")[[1]]
regmatches(core_string, gregexpr("[^*]", mask_string)) <- ss[ss != "*"]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/437243.html
上一篇:在表單中遇到Href問題
下一篇:用部分子字串替換字串的子字串
