R语言实现列表内矩阵排除0值取唯一值计算平均值的方法
R语言矩阵列表非0唯一值均值计算方案
核心实现逻辑:遍历列表中的每个矩阵,依次完成「提取非0元素→元素去重→计算均值」三个步骤即可,以下是两种常用实现方式:
方法1:Base R 原生实现(无额外依赖)
无需加载第三方包,直接用R内置函数即可完成计算:
# 你的示例数据 mat1.data <- c(0,6,3,8,0,6,8,10,0) mat1 <- matrix(mat1.data,nrow=3,ncol=3,byrow=TRUE) mat2.data <- c(0,5,5,1,0,1,7,23,0) mat2 <- matrix(mat2.data,nrow=3,ncol=3,byrow=TRUE) # 建议将列表名改为mat_list避免和之前的mat1变量冲突,你也可以保留原命名 mat_list <- list(mat1, mat2) # 核心计算代码 result <- lapply(mat_list, function(x) { # 提取非0值→去重→计算均值 mean(unique(x[x != 0])) }) # 查看结果 print(result)
计算结果说明:
- 第一个矩阵非0去重后值为 3、6、8、10,均值为 6.75
- 第二个矩阵非0去重后值为 1、5、7、23,均值为 9
如果需要将结果转为向量格式,直接调用unlist(result)即可。
方法2:tidyverse 风格实现
如果你已经在使用tidyverse生态,可以用purrr的管道写法实现,逻辑更直观:
library(purrr) result <- mat_list %>% map(~mean(unique(.x[.x != 0])))
内容的提问来源于stack exchange,提问作者John Huang
相关产品推荐
相关产品推荐

