替换矩阵中的多个值

时间:2016-10-10 20:00:40

标签: r replace

a是一个矩阵:

a <- matrix(1:9,3)

> a
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

我想将所有1替换为良好,将所有4替换为中等,将所有9替换为坏。

我使用以下代码:

a[a==1] <- "good"
a[a==4] <- "medium"
a[a==9] <- "bad"

> a
     [,1]   [,2]     [,3] 
[1,] "good" "medium" "7"  
[2,] "2"    "5"      "8"  
[3,] "3"    "6"      "bad"

它有效,但这是最简单的方法吗?我可以将这些代码组合成一个命令吗?

2 个答案:

答案 0 :(得分:4)

使用cut()

matrix(cut(a, breaks = c(0:9),
           labels = c("good", 2:3, "medium", 5:8, "bad")), 3)

但对手动标签位不满意。

也许使用match(),更灵活:

res <- matrix(c("good", "medium", "bad")[match(a, c(1, 4, 9))], 3)
res <- ifelse(is.na(res), a, res)

答案 1 :(得分:2)

car::recode()在这里做得很好,返回与输入相同的矩阵结构。

car::recode(a, "1='good';4='medium';9='bad'")
#      [,1]   [,2]     [,3] 
# [1,] "good" "medium" "7"  
# [2,] "2"    "5"      "8"  
# [3,] "3"    "6"      "bad"