如何对矩阵非NA元素重采样并生成下三角为NA的10×10矩阵?
嘿,这个需求很清晰,咱们用R来搞定它就行,步骤很直观:
解决方法
步骤1:先定义你的原矩阵(方便复现)
首先把你提供的矩阵用R代码定义出来:
mymatrix <- matrix(c( -0.6068580, -0.8890714, -0.8088864, -0.37703190, 0.97317259, 1.6331389, -0.0003412596, -0.9642963, 0, NA, 2.4474819, -0.7655850, 2.1295559, 1.74173972, 0.22162688, -1.0956214, 1.3373400489, 1.0344721, NA, NA, -0.1344245, -0.2457321, -0.5196433, -0.19503708, 1.01253271, -0.3426053, -1.1006913633, NA, NA, NA, -0.4566595, -0.8942554, 0.4021141, -1.43214088, 0.00130944, -0.1228521, NA, NA, NA, NA, 1.2089864, 0.1007919, 0.6669400, -0.01866827, -1.72585991, NA, NA, NA, NA, NA, 0.3114062, 0.4953031, -0.7354951, 0.85718973, NA, NA, NA, NA, NA, NA, 0.6323015, 2.2380874, -0.6270626, NA, NA, NA, NA, NA, NA, NA, 0.5002691, 0.7062827, NA, NA, NA, NA, NA, NA, NA, NA, -0.4541493, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA ), nrow=10, byrow=TRUE)
步骤2:提取矩阵中的非NA元素
我们先把所有非缺失值提取出来,存成一个向量:
non_na_values <- mymatrix[!is.na(mymatrix)]
步骤3:对非NA元素进行重采样
用R内置的sample()函数完成重采样。默认是有放回的随机抽样,如果需要无放回,加上replace=FALSE参数即可:
# 有放回重采样(默认) resampled_values <- sample(non_na_values) # 无放回重采样(可选) # resampled_values <- sample(non_na_values, replace = FALSE)
步骤4:生成结构一致的新矩阵
先复制原矩阵的NA结构,再把重采样后的数值填充到对应的非NA位置:
# 复制原矩阵的缺失值结构 new_matrix <- mymatrix # 将重采样值填充到非NA位置 new_matrix[!is.na(new_matrix)] <- resampled_values
验证结果
你可以检查新矩阵的NA位置是否和原矩阵完全一致:
# 对比NA位置是否相同 all(is.na(new_matrix) == is.na(mymatrix)) # 输出TRUE说明结构完全匹配
这样得到的new_matrix就是你想要的:10×10规模,下三角区域保持NA,非NA区域是原矩阵非NA元素的重采样结果。
内容的提问来源于stack exchange,提问作者PrettyClose
相关产品推荐
相关产品推荐

