首页 > 解决方案 > 绘制 Y(国家)对 X(年)显示 24 个国家的 GDP 同比增长(折线图)

问题描述

所以我不确定我做错了什么,但我一直遇到错误。所以我的项目的目标是根据我认为对我有意义的变量来缩小国家的选择范围,因此我试图根据下面的代码一点一点地减少(请原谅,如果我刚开始学习 R )。所以我已经设法获得了 24 个理想的国家,但肯定想进一步缩小范围,但想查看所选国家与 2015:2019 年的图表并显示它们的 gdp 增长。

所以我不断收到诸如Error in dimnames(x) <- dnx : 'dimnames' applied to non-arrayand之类的错误Error in dataframe

我不确定在图书馆(tidyr)之后我应该做什么。我在网上尝试了很多选项,但我觉得在这段代码之前我做错了什么。

data1 <-WDI(indicator= c("IT.NET.USER.ZS", "BX.KLT.DINV.CD.WD", "IT.NET.SECR.P6" , "NY.GDP.MKTP.KD.ZG"), start = 2015, end = 2019, extra = FALSE)

#get column names
colnames(data1)
#View data
data1 %>% 
  view()

#Change column names
names(data1)[names(data1) == "IT.NET.USER.ZS"] <- "internet_users"
names(data1)[names(data1) == "BX.KLT.DINV.CD.WD"] <- "foreign_direct_investment"
names(data1)[names(data1) == "NY.GDP.MKTP.KD.ZG"] <- "gdp_growth"
names(data1)[names(data1) == "IT.NET.SECR.P6"] <- "secure_internet"
summary(data1)

data1 %>% 
  count(internet_users, sort = TRUE)
data1 %>% 
  count(year, sort = TRUE)
data1 %>% 
  count(country, sort = TRUE)
view(data1)

gdp <- summary(data1$gdp_growth)
users <- summary(data1$internet_users)
fdi <- summary(data1$foreign_direct_investment)
secure <- summary(data1$secure_internet)
country <- summary(data1$country)
names(data1)

#Selecting range from Mean to 3rd Quartile of data1 for internet_users
data2 <- data1[ c(data1$internet_users < 76.56 & data1$internet_users > 52.54 & data1$year == 2019), ]
summary(data2)

#Selecting gdp growth >= Mean of gdp growth 2.470
data3 <- data2[ c(data2$gdp_growth >= 2.4451),]
is.na(data3)
na.omit(data3)
view(data3)

#Removal of non country data from data3
data4 <- data3[-c(1,4,9,17,19,20,24,25,29,30,33,34,35,36,38,39,40,42,43,44),]
view(data4)
countries_1 <- c(data4$country)
head(countries_1)
summary(countries_1)

#trynna plot something that works with year/country and gdp
yearchoice <- c(year = 2015:2019)
str(data4)
datalinegraph <- data.frame(c(yearchoice,countries_1))
unique(data4$country)

**#listing the countries I think I need to plat against**
data5 <- data1 %>%
  filter(country %in% countries_1)

library(tidyr)
data6 <-data.frame(data5)
data6.df$gdp = rownames(data5) 
df.long = gather(data = data5,                   
                 key = yearchoice,                   
                 value = gdp)

ggplot(data = df.long, aes(x = yearchoice, 
                           y = gdp, 
                           group=data5, 
                           color=variable)) +
  geom_line() +
  geom_point()```

标签: r

解决方案


这是国家/地区内的国家变量:

data1 <-WDI(indicator= c("IT.NET.USER.ZS", "BX.KLT.DINV.CD.WD", "IT.NET.SECR.P6" , "NY.GDP.MKTP.KD.ZG"), start = 2015, end = 2019, extra = FALSE)

#Change column names
names(data1)[names(data1) == "IT.NET.USER.ZS"] <- "internet_users"
names(data1)[names(data1) == "BX.KLT.DINV.CD.WD"] <- "foreign_direct_investment"
names(data1)[names(data1) == "NY.GDP.MKTP.KD.ZG"] <- "gdp_growth"
names(data1)[names(data1) == "IT.NET.SECR.P6"] <- "secure_internet"

#Selecting range from Mean to 3rd Quartile of data1 for internet_users
data2 <- data1 %>% filter(internet_users < 76.56 & 
                   internet_users > 52.54 & 
                   year == 2019 & 
                   gdp_growth >= 2.4451)

#Removal of non country data from data3
data4 <- data2 %>% filter(!iso2c %in% c("4E", "T4", "V3", "XT", "Z4"))
countries_1 <- c(data4$country)


#listing the countries I think I need to plat against**
data5 <- data1 %>%
  filter(country %in% countries_1)

r01 <- function(x){
  x <- x-min(x, na.rm=TRUE)
  x/max(x, na.rm=TRUE)
}
df.long = data5 %>% 
  mutate(across(internet_users:gdp_growth, r01)) %>% 
  pivot_longer(internet_users:gdp_growth, 
               names_to="variables", 
               values_to="vals")
ggplot(data = df.long, aes(x = year, 
                           y = vals, 
                           color=variables)) +
  geom_line() + 
  facet_wrap(~country) + 
  theme(legend.position = "top")

在此处输入图像描述

这是变量中的国家:

df.long2 = data5 %>% 
  pivot_longer(internet_users:gdp_growth, 
               names_to="variables", 
               values_to="vals")
ggplot(data = df.long2, aes(x = year, 
                           y = vals, 
                           color=country)) +
  geom_line() + 
  facet_wrap(~variables, scales="free_y") + 
  theme(legend.position = "top")

在此处输入图像描述


推荐阅读