我是編程新手,我偶然發現了一些我無法解決的問題,我希望你們能。
我正在使用 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')
}
}
}
我希望有人能幫幫忙!
uj5u.com熱心網友回復:
不需要for回圈。您可以簡單地使用dplyr::filter或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
))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315817.html
