R语言dplyr实现保留全量数据生成指定重复数值新列的方法
问题核心原因
直接给行数仅3的 data.frame 赋值长度为18的向量时,R会自动按循环规则截断向量到匹配行数,因此你之前得到的new_col仅保留了向量的前3个元素c(8,12,13)。
实现方案
首先定义你需要的基础向量:
vals <- c(8, 12, 13, 16, 14, 12)
方案1:生成长表(完整保留原有所有字段,新列含3轮指定值)
如果需要新列完整包含3轮vals(总长度18),同时原有所有字段不丢失,最终会生成18行的长表(原有3行每行对应6个新列元素),用crossing实现最稳妥,无截断风险:
library(dplyr) library(tidyr) vaccine_long <- vaccine %>% crossing(new_col = vals)
- 原有字段(AGE_GROUP、DATE、VACCINE_COUNT等)全部保留,按原行重复6次对应每个新列值
- 该实现天然基于AGE_GROUP维度拆分,每个年龄组对应完整的一轮
vals,组合后即为3轮指定值,完全符合要求
方案2:修正原有的mutate + unnest逻辑
你之前的代码问题大概率是没有正确将完整向量包装为列表,修正后代码可得到相同结果:
vaccine_long <- vaccine %>% mutate(new_col = list(vals)) %>% unnest(new_col)
特殊场景:保留原3行结构的列表列
如果不需要展开长表,只想保留原有3行结构,新增列的每个元素都存储包含3轮vals的向量,用base R直接实现即可:
vaccine$new_col <- rep(list(rep(vals, 3)), nrow(vaccine))
结果验证
运行以下代码可确认新列是否符合要求:
# 长表场景验证新列元素 all(vaccine_long$new_col == rep(vals, 3)) # 返回TRUE即为正确
内容的提问来源于stack exchange,提问作者Ali Roghani
相关产品推荐
相关产品推荐

