如何在R中按组补全连续变量以扩展dataframe数据框
实现方案
你之前使用expand()未达成目标的原因是该函数主要用于生成变量的所有笛卡尔积组合,无法直接生成指定区间内的连续整数,需要结合分组逻辑和序列生成函数实现需求,以下是两种可行方案:
方案1:tidyverse生态实现(推荐)
适配dplyr 1.1.0及以上版本的写法:
library(dplyr) df_want <- df_ask %>% # 按group_ask分组 group_by(group_ask) %>% # 对每组生成从number_ask最小值到最大值的连续整数,自动展开为多行 reframe(number_want = seq(min(number_ask), max(number_ask))) %>% ungroup()
如果使用旧版本dplyr不支持reframe(),可以搭配tidyr的unnest()实现:
library(dplyr) library(tidyr) df_want <- df_ask %>% group_by(group_ask) %>% summarise(number_want = list(seq(min(number_ask), max(number_ask)))) %>% unnest(number_want) %>% ungroup()
方案2:基础R实现(无需加载第三方包)
# 按group_ask拆分原数据框 df_split <- split(df_ask, df_ask$group_ask) # 遍历每个分组生成连续整数序列后合并 df_want <- do.call(rbind, lapply(df_split, function(group_df) { data.frame( group_want = unique(group_df$group_ask), number_want = seq(min(group_df$number_ask), max(group_df$number_ask)) ) })) # 可选操作:重置行号 rownames(df_want) <- NULL
以上两种方案生成的结果都和你预期的df_want完全一致。
内容的提问来源于stack exchange,提问作者sebastian.klotz
相关产品推荐
相关产品推荐

