匹配数字1

  • 本文关键字:数字 r
  • 更新时间 :
  • 英文 :


pset[[1]]="000100" "100110" "101101" "101111" "100001" "100010"

true="100110"

如果我想将1从true匹配到pset中的每个向量,该怎么办。因此,它将true的第一个、第四个和第五个位置匹配到pset中的所有6个向量,并作为匹配1的答案返回为:

1 3 2 3 1 2,即

"100110""000100";返回1个

"100110""100110";返回3

"100110""101101";返回2个

"100110""101111";返回3

"100110""100001〃;返回1个

"100110""100010〃;返回2个

我知道R中的匹配函数,但它会同时匹配0和1,但我只想从true到pset向量匹配1,这取决于它们的位置。

如有任何帮助,我们将不胜感激。

我知道它可能需要转换为布尔值,但我仍在挣扎。

解决问题的一种可能方法:

x = c("000100", "100110", "101101", "101111", "100001", "100010")
ix  = seq_len(nchar(true))
pos = which(strsplit(true, "")[[1]]=="1")
Reduce(`+`, lapply(Map(substr, list(x), ix, ix)[pos], `==`, "1"))
[1] 1 3 2 3 1 2

您可以使用str_splitwhich:

f <- function(true, x){
w1 <- which(str_split(true, "")[[1]] == 1)
w2 <- sapply(str_split(x, ""), (x) which(x == 1))
sapply(w2, (x) length(intersect(w1, x)))
}
f(true, x)
[1] 1 3 2 3 1 2

注意,function的快捷方式。

最新更新