如何在遍历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
相关产品推荐
相关产品推荐

