R:在数据框架中扩展某些国家/地区的年份范围



我有以下问题:我有一个所有北约国家的数据集,其中包括1980-2020年的年度成员国身份。现在我想把北约成立(1949-2020(以来的所有年份都包括在内。因此,例如比利时、加拿大、丹麦、法国、冰岛、意大利、卢森堡、荷兰、挪威、葡萄牙、英国、美国,应该增加1949-1980年的行数。

以下是数据集的简化版本:

country <- rep(c("Belgium", "Albania"), each= 10)
countrycode <- rep(c(56, 8), each=10)
year <- rep(c(1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000), 2)

df <- data.frame(country, countrycode, year)
country countrycode year
1  Belgium          56 1990
2  Belgium          56 1991
3  Belgium          56 1992
4  Belgium          56 1994
5  Belgium          56 1995
6  Belgium          56 1996
7  Belgium          56 1997
8  Belgium          56 1998
9  Belgium          56 1999
10 Belgium          56 2000
11 Albania           8 1990
12 Albania           8 1991
13 Albania           8 1992
14 Albania           8 1994
15 Albania           8 1995
16 Albania           8 1996
17 Albania           8 1997
18 Albania           8 1998
19 Albania           8 1999
20 Albania           8 2000

在这个例子中,在离开阿尔巴尼亚的同时,我如何最有效地将比利时的任期延长到1949年?

提前感谢您的回答!

您可以使用expand.grid创建年份和国家的所有有效组合(我认为这里的数据足够小(。然后对现有数据的所有组合进行左联接。这将导致国家和年份的每一个组合都出现一行。

country <- rep(c("Belgium", "Albania"), each= 10)
allCombos <- expand.grid(unique(country), 1949:2020) %>%
setNames(., c('country', 'year'))
countrycode <- rep(c(56, 8), each=10)
year <- rep(c(1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000), 2)

df <- data.frame(country, countrycode, year)
merge(allCombos, df, by = c('country', 'year'), all.x=TRUE)

部分输出:

country year countrycode
1   Belgium 1949          NA
2   Belgium 1950          NA
3   Belgium 1951          NA
4   Belgium 1952          NA
5   Belgium 1953          NA
6   Belgium 1954          NA
7   Belgium 1955          NA
8   Belgium 1956          NA
9   Belgium 1957          NA
10  Belgium 1958          NA
11  Belgium 1959          NA
12  Belgium 1960          NA

我们可以用比利时1949-1989创建一个数据帧,然后使用bind_rows:

country <- "Belgium"
countrycode <- 56
year <- 1949:1989
df1 <- data.frame(country, countrycode, year)
library(dplyr)
bind_rows(df, df1) %>% 
arrange(country, year)

输出

country countrycode year
1  Albania           8 1990
2  Albania           8 1991
3  Albania           8 1992
4  Albania           8 1994
5  Albania           8 1995
6  Albania           8 1996
7  Albania           8 1997
8  Albania           8 1998
9  Albania           8 1999
10 Albania           8 2000
11 Belgium          56 1949
12 Belgium          56 1950
13 Belgium          56 1951
14 Belgium          56 1952
15 Belgium          56 1953
16 Belgium          56 1954
17 Belgium          56 1955
18 Belgium          56 1956
19 Belgium          56 1957
20 Belgium          56 1958
21 Belgium          56 1959
22 Belgium          56 1960
23 Belgium          56 1961
24 Belgium          56 1962
25 Belgium          56 1963
26 Belgium          56 1964
27 Belgium          56 1965
28 Belgium          56 1966
29 Belgium          56 1967
30 Belgium          56 1968
31 Belgium          56 1969
32 Belgium          56 1970
33 Belgium          56 1971
34 Belgium          56 1972
35 Belgium          56 1973
36 Belgium          56 1974
37 Belgium          56 1975
38 Belgium          56 1976
39 Belgium          56 1977
40 Belgium          56 1978
41 Belgium          56 1979
42 Belgium          56 1980
43 Belgium          56 1981
44 Belgium          56 1982
45 Belgium          56 1983
46 Belgium          56 1984
47 Belgium          56 1985
48 Belgium          56 1986
49 Belgium          56 1987
50 Belgium          56 1988
51 Belgium          56 1989
52 Belgium          56 1990
53 Belgium          56 1991
54 Belgium          56 1992
55 Belgium          56 1994
56 Belgium          56 1995
57 Belgium          56 1996
58 Belgium          56 1997
59 Belgium          56 1998
60 Belgium          56 1999
61 Belgium          56 2000

最新更新