代码之家  ›  专栏  ›  技术社区  ›  bim

pmatch以错误的方式返回字符匹配

  •  2
  • bim  · 技术社区  · 9 年前

    我有一个字符单词矩阵(3乘3)和一个字典(n乘1)。我想找到与字典匹配的字符,将被字典中存在的字符位置替换,所有不匹配的单词将被删除(NA或NULL)。我试过简单 pmatch ,但它不起作用。我正在寻找这样的结果,

    1    5    2
    1    4    NA
    3    NA   2
    

    但以这种方式获得结果, [1] 1 NA 3 5 4 NA 2 NA NA

    我试过下面的代码,

    a <- matrix(c("456_rr", "432_uu", "522_kk", "456_rr", "432_tt", "522", "456_ss", "432", "522_kk"), nrow = 3, ncol = 3, byrow = TRUE) # WordTable
    
    b <- matrix(c("456_rr","522_kk","456_ss", "432_tt", "432_uu"), nrow = 5, ncol = 1) # Dictionary
    
    c <- pmatch(a, b)
    
    print(c)
    
    1 回复  |  直到 9 年前
        1
  •  2
  •   akrun    9 年前

    这个 nrow 在“b”中不正确。它应该是 5

    b <- matrix(c("456_rr","522_kk","456_ss", "432_tt", 
         "432_uu"), nrow = 5, ncol = 1) 
    v1 <- pmatch(a,b)
    m1 
    #[1]  1 NA  3  5  4 NA  2 NA NA
    
    dim(m1) <- dim(a)
    m1
    #     [,1] [,2] [,3]
    #[1,]    1    5    2
    #[2,]   NA    4   NA
    #[3,]    3   NA   NA
    

    如果需要获取重复项的索引,请使用 duplicates.ok=TRUE 默认为FALSE

    `dim<-`(pmatch(a, b, duplicates.ok=TRUE), dim(a))
    #     [,1] [,2] [,3]
    #[1,]    1    5    2
    #[2,]    1    4    2
    #[3,]    3   NA    2