我正在尝试将一个变量记录到一个年度数据集中,该变量每单位记录一次。虽然重复观察n次非常简单,但是我很难为观察分配数年。
我的数据结构如下:
id startyear endyear dummy
1 1946 2005 1
2 1957 2005 1
3 1982 2005 1
4 1973 2005 1
Run Code Online (Sandbox Code Playgroud)
我想做的是创建一个名为的新行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
[…]
Run Code Online (Sandbox Code Playgroud)
我试图使用slice
和mutate
在dplyr,结合rep
和seq
,但没有给我我想要的结果。任何帮助将不胜感激。
我们可以用来map2
为每个元素创建一个从“开始年”到“结束年”的序列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
#...
Run Code Online (Sandbox Code Playgroud)
或“身份证”做一组,mutate
成list
和unnest
df1 %>%
group_by(id) %>%
mutate(year = list(startyear:endyear)) %>%
unnest
Run Code Online (Sandbox Code Playgroud)