如何将基于历史观测值标准化后的列合并到R数据框tg中?
解决方法
你的问题出在循环没有正确存储标准化结果:当前的for循环只是打印计算值,并没有把所有结果保存到向量a中,循环结束后a实际上是NULL,自然没法添加到数据框里。
步骤1:正确生成标准化结果向量
先初始化一个空向量,再在循环中逐个存入计算值(同时处理第一个观测标准差为0的特殊情况):
# 初始化和len长度一致的空向量 a <- numeric(nrow(tg)) for (i in 1:nrow(tg)) { # 取前i个观测的均值和标准差 hist_mean <- mean(tg$len[1:i]) hist_sd <- sd(tg$len[1:i]) # 避免第一个观测sd=0导致的NaN,将其设为0 a[i] <- if (hist_sd == 0) 0 else (tg$len[i] - hist_mean) / hist_sd }
步骤2:将结果添加到数据框
直接用赋值语句把向量作为新列加入tg:
# 添加名为len_hist_standardized的新列 tg$len_hist_standardized <- a # 查看结果 head(tg)
如果习惯用dplyr,也可以这样写:
library(dplyr) tg <- tg %>% mutate(len_hist_standardized = a)
内容的提问来源于stack exchange,提问作者Es003
相关产品推荐
相关产品推荐

