我有這些向量:
texts=c("AANAAA","NNAAAA","AAAAAA", "NAAANN")
letter=c("C","C","G","T","P","D")
我正在嘗試替換其中N的每個元素,texts并將其替換為第二個陣列中letter的一個字符。
就拿"AANAAA",Nat第三個位置應該換成第三個元素letter,即G
我的預期輸出是:
texts=c("AAGAAA","CCAAAA","AAAAAA", "CAAAPD")
我正在嘗試gsub一個for回圈
for (i in 1:6) {
for (j in 1:4)
gsub("N",letter[i],texts[j][i])
}
但它沒有用。
uj5u.com熱心網友回復:
你可以像這樣在基礎 R 中做到這一點。不需要回圈。gregexpr提取texts匹配位置的串列。然后我們letter用 using 中的對應字符替換那些位置的字符regmatches<-。
m <- gregexpr("N", texts, fixed = TRUE)
regmatches(texts, m) <- lapply(m, \(i, x) x[i], letter)
輸出
> texts
[1] "AAGAAA" "CCAAAA" "AAAAAA" "CAAAPD"
uj5u.com熱心網友回復:
使用回圈,將文本拆分為字母并將“N”替換為相應的字母:
sapply(strsplit(texts, ""), function(i){
ix <- which(i == "N")
i[ ix ] <- letter[ ix ]
paste(i, collapse = "")
})
# [1] "AAGAAA" "CCAAAA" "AAAAAA" "CAAAPD"
uj5u.com熱心網友回復:
基于以下的解決方案tidyverse/purrr:
library(tidyverse)
texts=c("AANAAA","NNAAAA","AAAAAA", "NAAANN")
letter=c("C","C","G","T","P","D")
texts %>%
map(~ str_split(.x, "") %>% unlist %>%
map2_chr(letter, ~ if_else(.x == "N", .y, .x))) %>%
map_chr(~ str_c(.x, collapse = ""))
#> [1] "AAGAAA" "CCAAAA" "AAAAAA" "CAAAPD"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/409151.html
標籤:
上一篇:如何使用tidyr/dplyr進行兩步爭吵和嵌套,僅使用%>%管道?
下一篇:dplyr得到線性回歸系數
