簡體   English   中英

我可以使用 R 中的提示功能制作世界地圖嗎?

[英]Can I make a worldmap with the prompt function in R?

我是編程新手,我偶然發現了一些我無法解決的問題,我希望你們能。

我正在使用 FIFA 19 數據集。 請參閱下面的數據集部分:

               Name Nationality Overall                Club Balance
1          L. Messi   Argentina      94        FC Barcelona      95
2 Cristiano Ronaldo    Portugal      94            Juventus      70
3         Neymar Jr      Brazil      92 Paris Saint-Germain      84
4            De Gea       Spain      91   Manchester United      43
5      K. De Bruyne     Belgium      91     Manchester City      77
6         E. Hazard     Belgium      91             Chelsea      94

我想要的是一個世界地圖,您可以在其中插入帶有 readline(prompt) 功能的俱樂部,然后為您提供地圖,其中包含該俱樂部的所有球員,然后顯示這些球員來自世界上的哪個位置(因此計數對於每個俱樂部的每個國籍,如果這是有道理的)。

我在以下網站上看到了如何制作此數據集的世界地圖。

https://medium.com/@emrerencberoglu/visualization-of-fifa-2019-player-ratings-on-world-map-with-r-3c169a13347b

制作玩家總數世界地圖的代碼(對於整個數據集也是如此)如下。 它給了我正確的輸出。

overall_data <- fifa %>% 
  group_by(Nationality) %>% 
  summarise(Count = n(), 
            Avg_Overall = mean(Overall),
            Avg_Potential = mean(Potential),
            Avg_Pot_Diff = mean(Potential-Overall))

worldmap = map_data("world")

merged_data <- merge(x = worldmap, y = overall_data, by.x = "region", by.y = "Nationality", all.x = TRUE) %>% arrange(order)

ggplot(data = merged_data, aes(x = long, y = lat, group = group)) +
  geom_polygon(aes(fill = Count)) +
  labs(fill='Total Player Counts')

即,這張世界地圖: Worldmap Total Player Count

但這不允許我為每個俱樂部制作不同的地圖。 所以我制作了一個單獨的數據文件,它對每個俱樂部都有影響,每個國籍有多少。 我使用來自以下來源的 crosstab() 函數制作了一個交叉表:(“http://pcwww.liv.ac.uk/~william/R/crosstab.r”)。這是我使用的代碼:

nat_per_club <- crosstab(fifa, row.vars = "Nationality", col.vars = "Club", type ="f")
nat_per_club_crosstab <- nat_per_club$crosstab
nat_per_club_dataframe <- data.frame(nat_per_club_crosstab)
nat_per_club_dataframe <- nat_per_club_dataframe[!(nat_per_club_dataframe$Freq==0), ]

這給了我下表:

    Nationality                 Club Freq
8       Armenia  SSV Jahn Regensburg    1
60      Germany  SSV Jahn Regensburg   19
87       Kosovo  SSV Jahn Regensburg    1
94    Lithuania  SSV Jahn Regensburg    1
104     Morocco  SSV Jahn Regensburg    1
121      Poland  SSV Jahn Regensburg    1

這正是我想要的,因為它顯示了每個俱樂部和每個國籍的頻率。 現在的問題是,如何使用 readline(prompt) 函數在世界地圖中實現它。 因此,如果我插入例如 SSV Jahn Regensburg,它會向我顯示他們的球員來自世界何處的世界地圖?

這是我嘗試過的,但不幸的是它不起作用。

worldmap2 = map_data("world")

merged_data2 <- merge(x = worldmap2, y = nat_per_club_dataframe, by.x = "region", by.y = "Nationality", all.x = TRUE) %>% arrange(order)

ggplot(data = merged_data2, aes(x = long, y = lat, group = group)) +
  geom_polygon(aes(fill = Freq)) +
  labs(fill='Total Player Count')

players_from_where <- function() {
  club_name <- as.character(readline(prompt="Club: "))
  for(i in 1:nrow(nat_per_club_dataframe)){
    if(nat_per_club_dataframe[i, "Club"] == club_name){
    ggplot(data = merged_data2, aes(x = long, y = lat, group = group)) +
    geom_polygon(aes(fill = Freq)) +
    labs(fill='Total Player Counts')
    }
  }
}

我希望有人能幫幫忙!

不需要for循環。 您可以使用dplyr::filter或輸入的俱樂部名稱的subset簡單地過濾聚合數據subset ,將其合並到地圖數據和繪圖中。

library(tidyverse)

players_from_where <- function(club_name) {
  x <- filter(nat_per_club_dataframe, Club %in% club_name)

  worldmap <- map_data("world")

  merged_data2 <- merge(x = worldmap, y = x, by.x = "region", by.y = "Nationality", all.x = TRUE) %>%
    arrange(order)

  ggplot(data = merged_data2, aes(x = long, y = lat, group = group)) +
    geom_polygon(aes(fill = n)) +
    labs(fill = "Total Player Counts")
}

# club_name <- as.character(readline(prompt = "Club: "))
club_name <- "FC Barcelona"

players_from_where(club_name)

數據

nat_per_club_dataframe <- structure(list(Nationality = c(
  "Argentina", "Belgium", "Brazil",
  "Chile", "Croatia", "France", "Germany", "Netherlands", "Portugal",
  "Senegal", "Spain", "Uruguay", "Austria", "Brazil", "Colombia",
  "France", "Germany", "Netherlands", "Poland", "Portugal", "Spain"
), Club = c(
  "FC Barcelona", "FC Barcelona", "FC Barcelona", "FC Barcelona",
  "FC Barcelona", "FC Barcelona", "FC Barcelona", "FC Barcelona",
  "FC Barcelona", "FC Barcelona", "FC Barcelona", "FC Barcelona",
  "FC Bayern München", "FC Bayern München", "FC Bayern München",
  "FC Bayern München", "FC Bayern München", "FC Bayern München",
  "FC Bayern München", "FC Bayern München", "FC Bayern München"
), n = c(
  1L, 1L, 4L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 17L, 1L, 1L,
  1L, 1L, 3L, 18L, 1L, 1L, 1L, 2L
)), class = "data.frame", row.names = c(
  NA,
  -21L
))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM