R语言计算rolling median(滚动中位数)输出与预期不符求助
R语言滚动中位数代码问题排查与修正
存在的问题
- R语言的向量、数据框索引默认从1开始,你初始设置
i=0,向median_roll[0]赋值属于无效操作,第一次窗口计算的结果不会被存入结果向量,最终输出缺失首个值。 - 循环终止条件设置不合理:原代码
i < length(x)-n会少执行一次循环,导致缺失最后一个窗口的计算结果。 - 初始化
median_roll为字符型向量,会强制将数值型的中位数转为字符串存储,如有数值计算需求会存在类型问题。
修正后的代码
# 索引从1开始 i <- 1 x <- c(1:10) n <- 2 y <- as.data.frame(x) # 提前初始化固定长度的数值型结果向量 median_roll <- numeric(length(x) - n) # 调整循环终止条件为<= while(i <= length(x)-n){ median_roll[i] <- median(y[i:i+n, ]) i <- i + 1 }
运行后输出median_roll即可得到预期结果:
[1] 2 3 4 5 6 7 8 9
如果需要输出为字符型,将初始化代码替换为median_roll <- character(length(x) - n)即可。
内容的提问来源于stack exchange,提问作者Iftikhar
相关产品推荐
相关产品推荐

