You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在遍历poll_22列时生成带原列名的置信区间新列

解决R循环中置信区间列被覆盖的问题

你的核心问题是循环里每次都用固定列名赋值,导致之前的结果被覆盖。要给每个政党生成专属的区间列,只需修改循环对象为列名,并动态拼接新列名即可。

修改后的代码

# 遍历第6到22列的列名
for(col_name in colnames(poll_22)[6:22]) {
  n <- poll_22$n # 样本量
  p <- poll_22[[col_name]]/100 # 当前政党的支持率(转成比例)
  
  # 计算置信区间边际误差
  margin <- qnorm(0.975)*sqrt(p*(1-p)/n)
  
  # 计算上下限(转回百分比)
  lowerinterval <- (p - margin)*100
  upperinterval <- (p + margin)*100
  
  # 动态生成新列名并赋值
  poll_22[[paste0(col_name, "_lowerinterval")]] <- lowerinterval
  poll_22[[paste0(col_name, "_upperinterval")]] <- upperinterval
}

关键修改点

  • 循环对象改为列名:用colnames(poll_22)[6:22]获取第6到22列的政党标识(A、B、C等),这样能追踪当前处理的是哪个政党
  • 动态列赋值:用[[ ]]替代$,因为$只能处理固定列名,而[[ ]]可以接受字符串格式的动态列名;通过paste0(col_name, "_lowerinterval")拼接出类似A_lowerinterval的新列名
  • 获取当前列数据:用poll_22[[col_name]]获取当前政党的支持率数据,替代原代码中直接遍历列值的方式

运行这段代码后,poll_22会新增诸如A_lowerinterval、A_upperinterval、B_lowerinterval等列,每个政党的置信区间都会被单独保存,不会再出现覆盖问题。

内容的提问来源于stack exchange,提问作者Marco Liedecke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:45:30