如何在 R 中重复观察 n 次?

How to repeat observations n times in R?

我正在努力将每单位记录一次的变量合并到年度数据集中。虽然重复观察 n 次非常简单,但我无法为观察指定年份。

我的数据结构如下:

id startyear endyear dummy
1  1946      2005    1
2  1957      2005    1
3  1982      2005    1
4  1973      2005    1

我想做的是创建一个新行,称为 years,它重复单元 1 n = 2005 - 1946 = 59 次;单元 2 2005-1957 次,依此类推以及分配年份,生成以下输出:

id startyear endyear dummy year
1  1946      2005    1     1946
1  1946      2005    1     1947
1  1946      2005    1     1948
1  1946      2005    1     1949
[…]

我曾尝试在 dplyr 中使用 slicemutate,结合 repseq,但都没有给我想要的结果。任何帮助将不胜感激。

我们可以使用map2为每个元素创建一个从'startyear'到'endyear'的序列到list然后unnest

library(tidyverse)
df1 %>% 
    mutate(year = map2(startyear, endyear, `:`)) %>%
    unnest
# id startyear endyear dummy year
#1    1      1946    2005     1 1946
#2    1      1946    2005     1 1947
#3    1      1946    2005     1 1948
#4    1      1946    2005     1 1949
#5    1      1946    2005     1 1950
#6    1      1946    2005     1 1951
#7    1      1946    2005     1 1952
#...

或者将 'id'、mutate 分组为 listunnest

df1 %>% 
  group_by(id) %>% 
  mutate(year = list(startyear:endyear)) %>% 
  unnest

不太优雅的选择,几乎一样简单:

library(tidyverse)
df1 %>% 
    uncount(endyear - startyear + 1, .id = "row") %>%
    mutate(year = startyear + row - 1)