【问题标题】:Using a catalog to replace values in a vector in R使用目录替换 R 中向量中的值
【发布时间】:2020-03-28 20:18:25
【问题描述】:

我正在导入价值和货币数据,以及其他特征。货币是字符串,我需要将它们全部替换为数字 id。我确实有一个包含所有货币和 ID 的矩阵作为目录。

我的矩阵看起来像

main <- cbind(c("toys", "food"),c(345, 45), c("USD", "EUR"))
cat<-cbind(c("USD", "EUR"), c(1, 2))

我想要的结果是为了

main
[toys,  345,  1
 food,  45,   2]

【问题讨论】:

    标签: r substitution catalog


    【解决方案1】:

    也许:

    main[,3] <- cat[,2][match(main[,3], cat[,1])]
    

    输出:

         [,1]   [,2]  [,3]
    [1,] "toys" "345" "1" 
    [2,] "food" "45"  "2" 
    

    【讨论】:

    • 完美运行!非常感谢
    • 谢谢!如果有帮助,请考虑接受答案。
    【解决方案2】:

    这是使用来自 pakcage dplyrleft_join 的另一个选项,即,

    res <- unname(as.matrix(dplyr::left_join(data.frame(main),
                                             data.frame(cat),
                                             by = c("X3"="X1"))[-3]))
    
    

    这样

    > res
         [,1]   [,2]  [,3]
    [1,] "toys" "345" "1" 
    [2,] "food" "45"  "2" 
    

    【讨论】:

      【解决方案3】:

      假设 OP 想要匹配 'main' 中的所有元素而不是特定的列,我们可以使用 match 然后 replace

      i1 <- match(main, cat[,1])
      replace(main, !is.na(i1), cat[,2])
      #    [,1]   [,2]  [,3]
      #[1,] "toys" "345" "1" 
      #[2,] "food" "45"  "2" 
      

      或者另一种选择是创建一个名为 vector 并将其用于替换

      v1 <- setNames(cat[,2], cat[,1])[main]
      main[!is.na(v1)] <- v1[!is.na(v1)]
      main
      #    [,1]   [,2]  [,3]
      #[1,] "toys" "345" "1" 
      #[2,] "food" "45"  "2" 
      

      【讨论】:

        猜你喜欢
        • 2017-07-31
        • 2015-09-18
        • 2011-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-10
        • 2019-05-07
        • 1970-01-01
        相关资源
        最近更新 更多