在R中按分类规则离散化矩阵(无需转数据框/循环)
解决方案:无需转换data.frame或循环的矩阵离散化
当然可以!完全能满足你「不转data.frame、不用循环」的要求,咱们用R的向量化特性就能轻松实现。
首先先还原你的初始代码:
set.seed(2016) A <- matrix(rnorm(4,250,50), nrow = 2, ncol = 2, byrow = TRUE) lmh <- c("low", "moderate", "high")
核心实现代码
直接利用cut()函数的向量化处理能力,再将结果转回矩阵结构即可:
# 执行离散化并保持原矩阵维度 A_discretized <- matrix( cut(A, breaks = c(-Inf, 30, 300, Inf), labels = lmh), nrow = nrow(A), ncol = ncol(A), byrow = TRUE # 和原矩阵的填充顺序一致,保证位置对应 )
代码解释
cut()函数可以直接处理矩阵(因为矩阵在R底层是按列存储的向量,cut()会自动遍历所有元素),breaks参数定义了分类区间:<30(用-Inf兜底)、30-300、>300(用Inf兜底),labels指定了对应区间的类别名称。- 用
matrix()将cut()返回的分类结果转回和原矩阵完全一致的行列结构,byrow=TRUE匹配原矩阵的行优先填充方式,确保每个位置的分类结果和原矩阵元素一一对应。
验证效果
你可以打印原矩阵和离散后的结果确认:
# 原数值矩阵 print(A) # 离散化后的类别矩阵 print(A_discretized)
这种方案全程没有循环,也不需要把矩阵转换为data.frame,完全符合你的需求。
内容的提问来源于stack exchange,提问作者user1607
相关产品推荐
相关产品推荐

