2017-04-04 3 views
0

Ich habe eine CSV-Datei der durchschnittlichen Lebenserwartung nach Land für die letzten 50 Jahre. Ich versuche, ein Diagramm der Lebenserwartung nach Land zu erstellen, mit den Jahren 1960-2011 auf der x-Achse und der durchschnittlichen Lebenserwartung auf der y-Achse. Ich möchte nur die Top-Ten-Länder mit jeweils einer eigenen Linie darstellen. Ich habe jede mögliche Methode geforscht, um eine mehrzeilige Grafik der Daten zu zeichnen, die ich habe, und es scheint mir, dass es unmöglich ist mit der Art, wie die Daten formatiert werden. Meine Fragen sind:Multi Liniendiagramm in R

  1. Ist es möglich, das gewünschte Diagramm mit diesen Daten zu erstellen, wie es organisiert ist?
  2. Wenn die Daten neu strukturiert werden müssen, wie soll das geschehen? Gibt es in R eine Funktion, um Daten besser zu organisieren?

Ich konnte das gewünschte Diagramm in Excel HERE erstellen das ist genau das, was ich

Hier in R. tun möchte einen Link auf die lexp.csv Datei. https://drive.google.com/file/d/0BwsBIUlCf0Z3QVgtVGt4ampVcmM/view?usp=sharing

+0

Wie definieren Sie „Top 10 "? Die höchsten Durchschnittswerte im letzten Jahr? – neilfws

+1

'Bibliothek (ordentlich); gsheet :: gsheet2tbl ('https://docs.google.com/spreadsheets/d/1K5CKuaiUyhTy9YFjDCqLzmKgRf_DO2Ycy0Wbv95KwC4/edit?usp=sharing')%>% top_n (10, \ '2011 \')%>% sammeln (Jahr, \ 'Lebenserwartung \', -Land, convert = WAHR)%>% ggplot (aes (Jahr, \ 'Lebenserwartung \', color = Land)) + geom_line() ' – alistaire

+0

Es ist ein Lieblingsärgernis von mir, dass" durchschnittliches Leben Erwartung "ist überflüssig. Lebenserwartung ist ein Mittelwert. (Das ist eine Erwartung in Statistiken.) –

Antwort

2

Sie haben Recht, dass die Daten von einer Reorganisation profitieren würden. Dies ist ein "weit zu lang" -Problem d. H. es wäre besser, 3 Spalten zu haben: Land, Jahr und Alter.

Sie können die Daten mit dem tidyr-Paket neu formatieren, mit dem dplyr-Paket verarbeiten und unter Verwendung von ggplot2 plotten. Also unter der Annahme, dass Sie die CSV in R gelesen haben und über einen Datenrahmen lexp genannt, könnten Sie so etwas wie dies versuchen:

library(dplyr) 
library(tidyr) 
library(ggplot2) 

lexp %>% 
    # reformat from wide to long 
    gather(Year, Age, -Country, convert = TRUE) %>% 
    # select most recent year 
    filter(Year == max(Year)) %>% 
    # sort by decreasing age 
    arrange(desc(Age)) %>% 
    # take the top 10 countries 
    slice(1:10) %>% 
    select(Country) %>% 
    # join back to the original data 
    inner_join(lexp) %>% 
    # reformat again from wide to long 
    gather(Year, Age, -Country, convert = TRUE) %>% 
    # and plot the graph 
    ggplot(aes(Year, Age)) + geom_line(aes(color = Country, group = Country)) + 
    theme_dark() + theme(axis.text.x = element_text(angle = 90)) + 
    labs(title = "Life Expectancy") + 
    scale_color_brewer(palette = "Set3") 

Ergebnis: enter image description here

+2

Während es wie das Bild aussieht, würde es _better_ aussehen, wenn Sie 'Year' in eine Ganzzahl umwandelten, indem Sie' convert = TRUE' in 'gather' angeben, damit die x-Achse gerendert wird richtig. – alistaire

0
library("reshape2") 
library("ggplot2") 

test_data_long <- melt(df, id="Country") # convert to long format 
testdata<-test_data_long[complete.cases(test_data_long),] 
ggplot(data=testdata, 
     aes(x=variable, y=value)) + 
    geom_line(aes(color = Country, group = Country)) 
Verwandte Themen