【问题标题】:How to replace values in a matrix according to a list index in R?如何根据R中的列表索引替换矩阵中的值?
【发布时间】:2019-11-15 17:14:22
【问题描述】:

我有一个两列 664 行的矩阵“m”;每个 m[x,y] 的值都在 1 到 889 之间。

例如

nrow   ncol

1       3
1       250
1       341
2       212
2       452
....

另一方面,我有一个包含从数据库中提取的因子的 889 个字符串的列表;

例如

List
[1]   TORNADOS
[2]   EXTREME WEATHER
[3]   TORNADO
[4]   VOLCANO ERUPTION
....

我想根据索引将第一个矩阵中的数字替换为列表中的字符值。

例如

nrow   ncol      ---->     nrow     ncol
1      3                   TORNADOS TORNADO

谢谢!

【问题讨论】:

    标签: r list replace


    【解决方案1】:

    如果您的矩阵称为 mat 并且字符串列表称为 x 您可以这样做

    mat[] <- x[c(mat)]
    

    考虑一个可重现的例子,

    x <- c("TORNADOS", "EXTREME WEATHER", "TORNADO", "VOLCANO ERUPTION")
    mat <- matrix(c(1, 1, 1, 2, 2, 3, 4, 4, 1, 2), nrow = 5)
    mat
    #     [,1] [,2]
    #[1,]    1    3
    #[2,]    1    4
    #[3,]    1    4
    #[4,]    2    1
    #[5,]    2    2
    
    mat[] <- x[c(mat)]
    mat
    #           [,1]              [,2]              
    #[1,] "TORNADOS"        "TORNADO"         
    #[2,] "TORNADOS"        "VOLCANO ERUPTION"
    #[3,] "TORNADOS"        "VOLCANO ERUPTION"
    #[4,] "EXTREME WEATHER" "TORNADOS"        
    #[5,] "EXTREME WEATHER" "EXTREME WEATHER" 
    

    【讨论】:

      【解决方案2】:

      我们可以使用

      cbind(nrow = m[List[,1], ncol = m[List[,2]])
      

      【讨论】:

        【解决方案3】:

        我认为@akrun 编写的代码可能会出错。我没有评论的声誉,所以我在这里发布我的修订。这是我的解决方案版本:

        cbind(nrow = List[m[,1]], ncol = List[m[,2]])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-11-23
          • 1970-01-01
          • 2020-10-24
          • 1970-01-01
          • 2020-09-22
          • 2017-11-24
          • 2022-12-04
          相关资源
          最近更新 更多