如何将数字序列添加到 data.frame 的每组?

How to add sequence of numbers to each group of a data.frame?

我有一个美国邮政编码的数据框,我想在重复其余行的同时向每个唯一的邮政编码添加一个数字序列。现在,我的数据如下所示:

 zip   city        state_name   
  <chr> <chr>       <chr>        
1 01001 Agawam      Massachusetts
2 01002 Amherst     Massachusetts
3 01003 Amherst     Massachusetts
4 01005 Barre       Massachusetts
5 01007 Belchertown Massachusetts

对于每一行,我希望它看起来像这样(对于每个邮政编码。)

 zip   city        state_name    Num
  <chr> <chr>       <chr>        
 01001 Agawam      Massachusetts .8
 01001 Agawam      Massachusetts 1.0
 01001 Agawam      Massachusetts 1.2
 01001 Agawam      Massachusetts 1.4

其余行依此类推。

此处数据:

structure(list(zip = c("01001", "01002", "01003", "01005", "01007"
), city = c("Agawam", "Amherst", "Amherst", "Barre", "Belchertown"
), state_name = c("Massachusetts", "Massachusetts", "Massachusetts", 
"Massachusetts", "Massachusetts")), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))

如果我理解你的问题,你可以在 dplyr 中使用 group_bysummarize 来完成。

library("dplyr")

df |>
  group_by(across(everything())) |>
  summarize(Num=seq(0.8, 1.4, 0.2)) |>
  ungroup()

# A tibble: 20 × 4
   zip   city        state_name      Num
   <chr> <chr>       <chr>         <dbl>
 1 01001 Agawam      Massachusetts   0.8
 2 01001 Agawam      Massachusetts   1  
 3 01001 Agawam      Massachusetts   1.2
 4 01001 Agawam      Massachusetts   1.4
 5 01002 Amherst     Massachusetts   0.8
 6 01002 Amherst     Massachusetts   1  
 7 01002 Amherst     Massachusetts   1.2
 8 01002 Amherst     Massachusetts   1.4
 9 01003 Amherst     Massachusetts   0.8
10 01003 Amherst     Massachusetts   1  
11 01003 Amherst     Massachusetts   1.2
12 01003 Amherst     Massachusetts   1.4
13 01005 Barre       Massachusetts   0.8
14 01005 Barre       Massachusetts   1  
15 01005 Barre       Massachusetts   1.2
16 01005 Barre       Massachusetts   1.4
17 01007 Belchertown Massachusetts   0.8
18 01007 Belchertown Massachusetts   1  
19 01007 Belchertown Massachusetts   1.2
20 01007 Belchertown Massachusetts   1.4

这里有一些备选方案:

library(dplyr)
library(tidyr)

dat %>%
  expand_grid(Num = seq(.8, 1.4, .2))

或者:

dat %>%
  uncount(4) %>%
  mutate(Num = rep(seq(.8, 1.4, .2), length.out = n()))

或者:

dat %>%
  mutate(Num = list(seq(.8, 1.4, .2))) %>%
  unnest(Num)