[英]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) 功能的俱樂部,然后為您提供地圖,其中包含該俱樂部的所有球員,然后顯示這些球員來自世界上的哪個位置(因此計數對於每個俱樂部的每個國籍,如果這是有道理的)。
我在以下網站上看到了如何制作此數據集的世界地圖。
制作玩家總數世界地圖的代碼(對於整個數據集也是如此)如下。 它給了我正確的輸出。
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.