世界银行是否有重塑数据的R函数

世界银行是否有重塑数据的R函数,r,dataframe,data-cleaning,R,Dataframe,Data Cleaning,我正在尝试重塑数据,但仍有错误。这里有一些关于重塑的非常有用的线索,但我还没有看到我的特殊问题。我试图从长到宽,但都有国家名称和日期作为id,通常我已经看到了使日期成为新列的解决方案 #Data from: library(wbstats) WorldBank_long <- wb(indicator = c("NY.GDP.PCAP.KD", "SI.POV.GINI", "UNEMPSA_","CPTOTSAXMZG

我正在尝试重塑数据,但仍有错误。这里有一些关于重塑的非常有用的线索,但我还没有看到我的特殊问题。我试图从长到宽,但都有国家名称和日期作为id,通常我已经看到了使日期成为新列的解决方案

#Data from:
library(wbstats)
WorldBank_long <- wb(indicator = c("NY.GDP.PCAP.KD", "SI.POV.GINI", "UNEMPSA_","CPTOTSAXMZGY" ),
                     startdate = 2005, enddate = 2019)
WorldBank <- WorldBank_long[,c("iso3c", "date", "value", "indicatorID")]
错误:缺少聚合函数:默认为长度 ---列是我想要的,但值不是0或1

编辑: 当前表

iso3c    date        value    indicatorID
1   ARB 2019    6437.167    NY.GDP.PCAP.KD
2   ARB 2018    6465.474    NY.GDP.PCAP.KD
3   ARB 2017    6454.460    NY.GDP.PCAP.KD
4   ARB 2016    6506.271    NY.GDP.PCAP.KD
5   ARB 2015    6418.029    NY.GDP.PCAP.KD
6   ARB 2014    6350.838    NY.GDP.PCAP.KD
7   ARB 2013    6333.027    NY.GDP.PCAP.KD
8   ARB 2012    6274.111    NY.GDP.PCAP.KD
9   ARB 2011    6020.487    NY.GDP.PCAP.KD
10  ARB 2010    5934.291    NY.GDP.PCAP.KD
11  ARB 2009    5806.185    NY.GDP.PCAP.KD
我想要做的是——只需要使用上面的值而不是0和1(这是我从(data.table)的输出):

编辑2

新命令看起来比所有其他输出都好,但我的所有值(即人均GDP或基尼值)现在都被重复,因此除定义的列外,所有其他列都是NA。但向下滚动时,GDP变为NA,基尼值也变为NA

#using new command:

WorldBank_data_wide<-WorldBank %>%   
 mutate(row = row_number()) %>%   pivot_wider(names_from = indicatorID, values_from = value)

#output
  iso3c date row.  NY.GDP.PCAP.KDSI.POV.GINIUNEMPSA_CPTOTSAXMZGY
2138    BDI 2019    1126    208.0747    NA  NA  NA
2139    BDI 2018    1127    210.8042    NA  NA  NA
2140    BDI 2017    1128    214.1392    NA  NA  NA
2141    BDI 2016    1129    219.9615    NA  NA  NA
2152    BDI 2005    1140    221.0964    NA  NA  NA
2151    BDI 2006    1139    225.6222    NA  NA  NA
2150    BDI 2007    1138    225.8591    NA  NA  NA
2142    BDI 2015    1130    228.4325    NA  NA  NA
2149    BDI 2008    1137    229.1485    NA  NA  NA
2148    BDI 2009    1136    230.1926    NA  NA  NA
2592    ETH 2005    1580    233.9442    NA  NA  NA
#使用新命令:
世界银行数据范围%
变异(row=row\u number())%%>%pivot\u加宽(名称\u from=indicator,值\u from=value)
#输出
iso3c日期行.NY.GDP.PCAP.KDSI.POV.GINIUNEMPSA_cptotsaxmmzgy
2138 BDI 2019 1126 208.0747不适用
2139 BDI 2018 1127 210.8042不适用
2140 BDI 2017 1128 214.1392不适用
2141 BDI 2016 1129 219.9615不适用
2152 BDI 2005 1140 221.0964不适用
2151 BDI 2006 1139 225.6222不适用
2150 BDI 2007 1138225.8591不适用
2142 BDI 2015 1130 228.4325不适用
2149 BDI 2008 1137 229.1485不适用
2148 BDI 2009 1136 230.1926不适用
2592 ETH 2005 1580 233.9442不适用
编辑:

另一个不可预见的问题——一些命令正在工作,但不是每一行都是唯一的国家和年份——一些命令被重复,因此2013年阿根廷有多行(例如)

World\u bank\u wide%
分组依据(iso3c,指标)%>%
突变(行id=1:n())%%>%ungroup()%%>%
价差(指示符,值)%>%
选择(-row\u id)
行iso3c日期CPTOTSAXMMZGY NY.GDP.PCAP.KD SI.POV.GINI UNEMPSA_
1 ABW 2005 NA 26979.8854 NA
104为2011年NA 34634.862 NA
105为2012年不适用35416.892不适用
106为2013年不适用36978.833不适用
107是2014年NA 32.5 NA
108是2014年北美38495.046北美
109为2015 NA 40247.747 NA
110是2016 NA 41045.111 NA
111个为2017 NA 41460.283 NA
使用以下代码

library(tidyverse)

WorldBank_data_wide<-WorldBank %>% 
  mutate(row = row_number()) %>%
  pivot_wider(names_from = indicatorID, values_from = value)
库(tidyverse)
世界银行数据范围%
变异(行=行编号())%>%
枢轴(名称从=指示符,值从=值)
使用以下代码

library(tidyverse)

WorldBank_data_wide<-WorldBank %>% 
  mutate(row = row_number()) %>%
  pivot_wider(names_from = indicatorID, values_from = value)
库(tidyverse)
世界银行数据范围%
变异(行=行编号())%>%
枢轴(名称从=指示符,值从=值)

一些搜索导致了此解决方案:

库(wbstats)
世界银行长%ungroup()%>%
价差(指示符,值)%>%
选择(-row\u id)
输出:

> World_bank_wide[1:3,]
# A tibble: 3 x 6
  iso3c date  CPTOTSAXMZGY NY.GDP.PCAP.KD SI.POV.GINI UNEMPSA_
  <chr> <chr>        <dbl>          <dbl>       <dbl>    <dbl>
1 ABW   2005            NA         26980.          NA       NA
2 ABW   2006            NA         27046.          NA       NA
3 ABW   2007            NA         27428.          NA       NA
>世界银行[1:3]
#一个tibble:3x6
iso3c日期CPTOTSAXMMZGY NY.GDP.PCAP.KD SI.POV.GINI UNEMPSA_
1 ABW 2005 NA 26980。NA NA
2 ABW 2006 NA 27046。NA NA
3 ABW 2007 NA 27428。NA NA
我不知道如何发布输出,但它与上面列出的一样


编辑:了解了如何发布输出。我使用RStudio自动将输出填充到表中。相反,将其放入控制台并复制/粘贴输出是有效的。

一些搜索导致了此解决方案:

库(wbstats)
世界银行长%ungroup()%>%
价差(指示符,值)%>%
选择(-row\u id)
输出:

> World_bank_wide[1:3,]
# A tibble: 3 x 6
  iso3c date  CPTOTSAXMZGY NY.GDP.PCAP.KD SI.POV.GINI UNEMPSA_
  <chr> <chr>        <dbl>          <dbl>       <dbl>    <dbl>
1 ABW   2005            NA         26980.          NA       NA
2 ABW   2006            NA         27046.          NA       NA
3 ABW   2007            NA         27428.          NA       NA
>世界银行[1:3]
#一个tibble:3x6
iso3c日期CPTOTSAXMMZGY NY.GDP.PCAP.KD SI.POV.GINI UNEMPSA_
1 ABW 2005 NA 26980。NA NA
2 ABW 2006 NA 27046。NA NA
3 ABW 2007 NA 27428。NA NA
我不知道如何发布输出,但它与上面列出的一样


编辑:了解了如何发布输出。我使用的是RStudio,它可以自动将输出填充到表中。相反,将其放入控制台并复制/粘贴输出是有效的。

基于上面的一些编辑,我认为您可能正在寻找类似的内容。首先,您要创建一个变量
id
,以便每行都有一个unique值(否则,在使用
pivot\u-wider
时将返回错误)。然后,使用
pivot\u-wider
将数据从长到宽分散,然后删除
id
变量。最后,您只选择唯一的行值(删除重复项),然后按
iso3c
日期进行排序

编辑:由于您需要跨行聚合,
NA
值跨越数值列,因此您可以
汇总
值不
NA
的行,以获得每个
iso3c
日期的行数。然后您可以将
NA
数值替换为0

library(wbstats)
library(tidyverse)

WorldBank_long <- wb(indicator = c("NY.GDP.PCAP.KD", "SI.POV.GINI", "UNEMPSA_","CPTOTSAXMZGY" ),
                     startdate = 2005, enddate = 2019)
WorldBank <- WorldBank_long[,c("iso3c", "date", "value", "indicatorID")]


WorldBank %>% 
  mutate(id = row_number()) %>% 
  pivot_wider(names_from = indicatorID, values_from = value) %>%
  select(-id) %>% 
  distinct() %>% 
  arrange(iso3c, date) %>% 
  group_by(iso3c, date) %>% 
  mutate_all(as.character) %>% 
  summarise(across(.cols = everything(), .fns = ~ .[!is.na(.)][1])) %>% 
  mutate_at(c("NY.GDP.PCAP.KD","SI.POV.GINI", "UNEMPSA_", "CPTOTSAXMZGY"), as.numeric) %>% 
  mutate(across(where(is.numeric), ~replace_na(., 0)))

根据上面的一些编辑,我认为您可能正在寻找类似的内容。首先,您要创建一个变量
id
,以便每一行都有一个唯一的值(否则,在使用
pivot\u
时会返回一个错误)。然后,使用
pivot\u wide
将数据从长到宽展开,然后删除
id
变量。最后,您只需选择唯一的行值(删除重复项),然后按
iso3c
日期进行排序

编辑:由于您需要跨行聚合,
NA
值跨越数值列,因此您可以
汇总
值不是
NA
的行以获得一个值
> World_bank_wide[1:3,]
# A tibble: 3 x 6
  iso3c date  CPTOTSAXMZGY NY.GDP.PCAP.KD SI.POV.GINI UNEMPSA_
  <chr> <chr>        <dbl>          <dbl>       <dbl>    <dbl>
1 ABW   2005            NA         26980.          NA       NA
2 ABW   2006            NA         27046.          NA       NA
3 ABW   2007            NA         27428.          NA       NA
library(wbstats)
library(tidyverse)

WorldBank_long <- wb(indicator = c("NY.GDP.PCAP.KD", "SI.POV.GINI", "UNEMPSA_","CPTOTSAXMZGY" ),
                     startdate = 2005, enddate = 2019)
WorldBank <- WorldBank_long[,c("iso3c", "date", "value", "indicatorID")]


WorldBank %>% 
  mutate(id = row_number()) %>% 
  pivot_wider(names_from = indicatorID, values_from = value) %>%
  select(-id) %>% 
  distinct() %>% 
  arrange(iso3c, date) %>% 
  group_by(iso3c, date) %>% 
  mutate_all(as.character) %>% 
  summarise(across(.cols = everything(), .fns = ~ .[!is.na(.)][1])) %>% 
  mutate_at(c("NY.GDP.PCAP.KD","SI.POV.GINI", "UNEMPSA_", "CPTOTSAXMZGY"), as.numeric) %>% 
  mutate(across(where(is.numeric), ~replace_na(., 0)))
iso3c date  NY.GDP.PCAP.KD SI.POV.GINI UNEMPSA_ CPTOTSAXMZGY
   <chr> <chr>          <dbl>       <dbl>    <dbl>        <dbl>
 1 ARG   2005           8578.        48      11.6             0
 2 ARG   2006           9175.        46.7    10.2             0
 3 ARG   2007           9902.        46.6     8.45            0
 4 ARG   2008          10201.        45.3     7.86            0
 5 ARG   2009           9502.        44.1     8.67            0
 6 ARG   2010          10386.        44.5     7.75            0
 7 ARG   2011          10883.        42.7     7.15            0
 8 ARG   2012          10650.        41.4     7.21            0
 9 ARG   2013          10785.        41       7.08            0
10 ARG   2014          10399.        41.7     7.27            0
11 ARG   2015          10568.         0       6.61            0
12 ARG   2016          10239.        42       8.47            0
13 ARG   2017          10404.        41.2     8.35            0
14 ARG   2018          10044.        41.4     9.24            0
15 ARG   2019           9729.         0       0               0
library(wbstats)

nations<-wbcountries()

GDP <- wb(indicator = c("NY.GDP.PCAP.KD"),
                     startdate = 2005, enddate = 2019)
GDP <- GDP[,c("iso3c", "date", "value")]
names(GDP)
names(GDP)<-c("iso3c", "date", "GDP.PC")

#example of new dataset:    
   iso3c date  GDP.PC
1   ARB 2019    6437.167
2   ARB 2018    6465.474
3   ARB 2017    6454.460
4   ARB 2016    6506.271
5   ARB 2015    6418.029


Gini <- wb(indicator = c("SI.POV.GINI"),
                     startdate = 2005, enddate = 2019)
Gini <- Gini[,c("iso3c", "date", "value")]
names(Gini)
names(Gini)<-c("iso3c", "date", "Gini")

Unemp <- wb(indicator = c("UNEMPSA_"),
           startdate = 2005, enddate = 2019)
Unemp <- Unemp[,c("iso3c", "date", "value")]
names(Unemp)
names(Unemp)<-c("iso3c", "date", "UnemploymentRate")

Rate <- wb(indicator = c("CPTOTSAXMZGY" ),
                     startdate = 2005, enddate = 2019)
Rate <- Rate[,c("iso3c", "date", "value")]
names(Rate)
names(Rate)<-c("iso3c", "date", "Rate")

World_bank_wide <- merge(GDP, Gini, by = c("iso3c", "date"))
World_bank_wide <- merge(World_bank_wide, Unemp, by = c("iso3c", "date"))

#final output
    
   iso3c date    GDP.PC     Gini   UnemploymentRate
1   ARG 2005    8577.865    48.0    11.5604135
2   ARG 2006    9174.502    46.7    10.1507404
3   ARG 2007    9901.512    46.6    8.4456562
4   ARG 2008    10201.476   45.3    7.8568969
5   ARG 2009    9502.244    44.1    8.6676318
6   ARG 2010    10385.964   44.5    7.7457817
7   ARG 2011    10883.315   42.7    7.1539098