如何根据R中的列表索引替换矩阵中的值?

时间:2019-07-05 05:01:48

标签: r list replace

我有一个矩阵“ m”,其中有两列和664行;每个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

谢谢!

3 个答案:

答案 0 :(得分: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" 

答案 1 :(得分:1)

我们可以使用

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

答案 2 :(得分:0)

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

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