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"
它有效,但这是最简单的方法吗?我可以将这些代码组合成一个命令吗?
答案 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"