如何基于外部变量nFinal在dplyr的summarise中动态生成指定数量val列
实现方案
你可以直接通过先计算加权频次表再转宽的方式实现,完全不用硬编码列,适配任意nFinal取值,加权表仅计算1次性能更高:
library(dplyr) library(tibble) library(questionr) # 动态配置的nFinal,可任意修改为整数 nFinal <- 10 # 自动适配nFinal的示例数据生成 graphData <- tibble( y = rep(1:nFinal, 2), ponde = runif(nFinal * 2, min = 0, max = 1) ) # 核心逻辑:动态生成对应数量的val列 totalData <- graphData %>% with(prop.table(wtd.table(y, weights = ponde)) * 100) %>% as.list() %>% as_tibble(.name_repair = ~ paste0("val", seq_along(.x)))
如果你希望保持summarise的写法,也可以用dplyr的动态列生成语法实现:
totalData <- graphData %>% summarise( across(1:nFinal, ~ prop.table(questionr::wtd.table(y, weights = ponde))[.x], .names = "val{.col}") * 100 )
内容的提问来源于stack exchange,提问作者Gaborio
相关产品推荐
相关产品推荐

