如何在 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 中使用 slice
和 mutate
,结合 rep
和 seq
,但都没有给我想要的结果。任何帮助将不胜感激。
我们可以使用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
分组为 list
和 unnest
df1 %>%
group_by(id) %>%
mutate(year = list(startyear:endyear)) %>%
unnest
不太优雅的选择,几乎一样简单:
library(tidyverse)
df1 %>%
uncount(endyear - startyear + 1, .id = "row") %>%
mutate(year = startyear + row - 1)
我正在努力将每单位记录一次的变量合并到年度数据集中。虽然重复观察 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 中使用 slice
和 mutate
,结合 rep
和 seq
,但都没有给我想要的结果。任何帮助将不胜感激。
我们可以使用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
分组为 list
和 unnest
df1 %>%
group_by(id) %>%
mutate(year = list(startyear:endyear)) %>%
unnest
不太优雅的选择,几乎一样简单:
library(tidyverse)
df1 %>%
uncount(endyear - startyear + 1, .id = "row") %>%
mutate(year = startyear + row - 1)