因此,我有一个数据集,显示每个国家加入世界贸易组织(WTO)及其前身《关税与贸易总协定》(1995年)的年份。需要注意的重要一点是,WTO于1995年作为关贸总协定(创建于1947年成立)的扩展而创建,一些GATT成员(例如安哥拉以下国家)并未在1995年立即加入WTO,而是一直等到1996年或更晚,具体取决于国家。一些国家也不是关贸总协定的成员,而是在WTO成立后加入了WTO(例如以下的阿富汗)。
我想以下面的第一个小节的格式获取数据,并将格式更改为包含每个国家/地区的所有年份的列表以及一个明确的变量,以显示它们是否是关贸总协定,世贸组织的成员,或者都不是然而。我的实际数据集比这个示例的日期要大得多,该示例的日期是1948年到2017年,而且还有更多的国家/地区,因此手动执行此操作会很糟糕。
在此示例中,仅将日期限制为1992年至1996年,并查看了前6个国家/地区,基本上,我想从此开始:
<fragment
android:name="com.test.livedatatestapp.LiveDataTestFragment"
android:id="@+id/fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
对此:
df <- data.frame(Country = c("Afghanistan", "Albania", "Angola", "Antigua and Barbuda", "Argentina", "Armenia"),
Year_joined_WTO = c(2016, 2000, 1996, 1995, 1995, 2003),
Year_joined_GATT = c(NA, NA, 1994, 1987, 1967, NA))
df <- as_tibble(df)
> df
# A tibble: 6 x 3
Country Year_joined_WTO Year_joined_GATT
<fct> <dbl> <dbl>
1 Afghanistan 2016 NA
2 Albania 2000 NA
3 Angola 1996 1994
4 Antigua and Barbuda 1995 1987
5 Argentina 1995 1967
6 Armenia 2003 NA
我尝试将年份汇总到一个栏中,但是我遇到的问题是如何在一个栏中显示每个国家的每年情况,以及如何在加入后的几年中显示出他们的身份。
我微弱的尝试:
df_intended <- data.frame(Country = c("Afghanistan", "Afghanistan","Afghanistan","Afghanistan","Afghanistan", "Albania", "Albania","Albania","Albania","Albania","Angola", "Angola","Angola","Angola","Angola","Antigua and Barbuda","Antigua and Barbuda","Antigua and Barbuda","Antigua and Barbuda","Antigua and Barbuda", "Argentina", "Argentina","Argentina","Argentina","Argentina","Armenia","Armenia","Armenia","Armenia","Armenia"),
Year = c(1992, 1993, 1994, 1995, 1996, 1992, 1993, 1994, 1995, 1996,1992, 1993, 1994, 1995, 1996,1992, 1993, 1994, 1995, 1996,1992, 1993, 1994, 1995, 1996,1992, 1993, 1994, 1995, 1996),
Member_WTO_GATT = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "GATT", "GATT", "WTO", "GATT","GATT","GATT", "WTO", "WTO", "GATT","GATT","GATT", "WTO", "WTO", NA, NA, NA, NA, NA))
df_intended <- as_tibble(df_intended)
print(tbl_df(df_intended), n =30)
# A tibble: 30 x 3
Country Year Member_WTO_GATT
<fct> <dbl> <fct>
1 Afghanistan 1992 NA
2 Afghanistan 1993 NA
3 Afghanistan 1994 NA
4 Afghanistan 1995 NA
5 Afghanistan 1996 NA
6 Albania 1992 NA
7 Albania 1993 NA
8 Albania 1994 NA
9 Albania 1995 NA
10 Albania 1996 NA
11 Angola 1992 NA
12 Angola 1993 NA
13 Angola 1994 GATT
14 Angola 1995 GATT
15 Angola 1996 WTO
16 Antigua and Barbuda 1992 GATT
17 Antigua and Barbuda 1993 GATT
18 Antigua and Barbuda 1994 GATT
19 Antigua and Barbuda 1995 WTO
20 Antigua and Barbuda 1996 WTO
21 Argentina 1992 GATT
22 Argentina 1993 GATT
23 Argentina 1994 GATT
24 Argentina 1995 WTO
25 Argentina 1996 WTO
26 Armenia 1992 NA
27 Armenia 1993 NA
28 Armenia 1994 NA
29 Armenia 1995 NA
30 Armenia 1996 NA
我也尝试过进行一些合并,并合并所有想要的日期列表(例如
df2 <- df %>%
group_by(Country) %>%
gather(Year_joined_WTO, Year_joined_GATT, key = member_wto_gatt, value = Year)
> df2
# A tibble: 12 x 3
# Groups: Country [6]
Country member_wto_gatt Year
<fct> <chr> <dbl>
1 Afghanistan Year_joined_WTO 2016
2 Albania Year_joined_WTO 2000
3 Angola Year_joined_WTO 1996
4 Antigua and Barbuda Year_joined_WTO 1995
5 Argentina Year_joined_WTO 1995
6 Armenia Year_joined_WTO 2003
7 Afghanistan Year_joined_GATT NA
8 Albania Year_joined_GATT NA
9 Angola Year_joined_GATT 1994
10 Antigua and Barbuda Year_joined_GATT 1987
11 Argentina Year_joined_GATT 1967
12 Armenia Year_joined_GATT NA
) 但是它们完全失败了,我找不到任何类似的示例来做到这一点。任何帮助将不胜感激
答案 0 :(得分:1)
您可以尝试使用gather
,complete
和fill
。将数据gather
转换为长格式,使用sub
将列名分别用"WTO"
和"GATT"
,group_by
Country
然后{{1} }具有最新非NA值的NA值。
fill
对于真实数据,您可以使用library(dplyr)
library(tidyr)
df %>%
gather(key, Value, -Country) %>%
mutate(key = sub("Year_joined_", "", key)) %>%
group_by(Country) %>%
complete(Value = seq(1992, 1996)) %>%
fill(key)
而不是硬编码年份,或者如果您已经知道每个国家应该拥有的年份,则可以使用这些数字。
答案 1 :(得分:0)
这是一种在感兴趣的年份合并然后在成员资格列中使用case_when()
的替代方法。
library(dplyr)
df %>%
merge(data.frame(year = 1992:1996), .) %>%
mutate(Member_WTO_GATT = case_when(Year_joined_WTO <= year ~ "WTO",
Year_joined_GATT <= year ~ "GATT",
TRUE~ NA_character_)) %>%
select(-(starts_with("Year_")))
答案 2 :(得分:0)
对于新版本的tidyr
(1.0.0),gather
,spread
,here会被弃用,并替换为pivot_longer
/ { {1}},仅使用pivot_wider
个功能
tidyverse