如何计算不同长度R向量的逐位元素均值并存储为数组
计算不同长度R向量的逐位元素均值
原始向量定义
a <- c(1) # 长度为1 b <- c(4.4,3.5) # 长度为2 c <- c(5.6,7.8,6.0) # 长度为3 d <- c(0.8,6.9,8.8,5.8) # 长度为4 e <- c(1.8,2.5,2.3,6.5,1.1) # 长度为5
需求说明
计算所有向量的逐位元素均值:
- 第1位:取5个向量的第1个元素,均值为
(a[1]+b[1]+c[1]+d[1]+e[1])/5 - 第2位:取4个长度≥2的向量的第2个元素,均值为
(b[2]+c[2]+d[2]+e[2])/4 - 第3位:取3个长度≥3的向量的第3个元素,均值为
(c[3]+d[3]+e[3])/3 - 第4位:取2个长度≥4的向量的第4个元素,均值为
(d[4]+e[4])/2 - 第5位:取1个长度≥5的向量的第5个元素,均值为
e[5]/1
解决方案
方法1:手动计算(适合少量向量)
直接按规则逐位计算,结果存入向量:
# 初始化结果向量,长度等于最长向量的长度 result <- numeric(length(e)) # 计算每一位均值 result[1] <- mean(c(a[1], b[1], c[1], d[1], e[1])) result[2] <- mean(c(b[2], c[2], d[2], e[2])) result[3] <- mean(c(c[3], d[3], e[3])) result[4] <- mean(c(d[4], e[4])) result[5] <- mean(e[5]) # 输出结果 result
方法2:自动化计算(适合大量向量)
通过列表和矩阵处理,自动适配任意数量和长度的向量:
# 将所有向量存入列表 vec_list <- list(a, b, c, d, e) # 获取最长向量的长度 max_length <- max(sapply(vec_list, length)) # 将每个向量填充NA至最长长度,合并为矩阵 vec_matrix <- do.call(rbind, lapply(vec_list, function(vec) { c(vec, rep(NA, max_length - length(vec))) })) # 计算每列均值(忽略NA) result <- colMeans(vec_matrix, na.rm = TRUE) # 输出结果 result
内容的提问来源于stack exchange,提问作者Bella_18
相关产品推荐
相关产品推荐

