R语言:复制tibble行同时递增指定列的实现问题
问题解答
你的当前思路不正确,因为uncount()函数仅能根据freq值重复现有行,只会复制原有的day数值,无法生成新的连续天数序列,最终day列会是原最大天数的重复值,而非你需要的目标天数。
要实现需求,正确思路是按食物类型分组后,直接生成包含原有天数和补充天数的完整序列,具体代码如下:
library(dplyr) library(tibble) # 原始数据集 original_tbl <- tibble(food = c(rep("sunflower",3), rep("suet",3)), day = c(1:3, c(1,2,5))) # 生成目标数据集 original_tbl %>% group_by(food) %>% group_modify(~ tibble(day = c(.x$day, seq(max(.x$day) + 1, 8)))) %>% ungroup()
执行后得到的结果符合需求:
# A tibble: 14 × 2 food day <chr> <int> 1 sunflower 1 2 sunflower 2 3 sunflower 3 4 sunflower 4 5 sunflower 5 6 sunflower 6 7 sunflower 7 8 sunflower 8 9 suet 1 10 suet 2 11 suet 5 12 suet 6 13 suet 7 14 suet 8
如果你习惯用summarize结合unnest的写法,也可以这样实现:
library(tidyr) original_tbl %>% group_by(food) %>% summarize(day = list(c(day, seq(max(day) + 1, 8)))) %>% unnest(day)
内容的提问来源于stack exchange,提问作者David Robie
相关产品推荐
相关产品推荐

