Linkki kotitehtävän lähdekoodiin gitlab:ssa
library(knitr)
opts_chunk$set(list(echo=TRUE,eval=TRUE,cache=FALSE,warning=FALSE,message=FALSE))
R:ssä on kommennot käyttöjärjestelmän tiedostojärjestelmän käyttöön, kuten tiedostojen luomiseen (file.create()) kansioiden luomiseen (dir.create()).
Millä komennolla luot nykyisen työhakemistoon kansion kotitehtava3?
dir.create("./_kotitehtava3", showWarnings = FALSE)
Alla oleva skripti luo viisi uutta tibbleobjektia cases,pollution,storms,songs ja artists. Luo ensin objektit ajamalla koodi.
library(tidyverse)
# cases-data
cases <- dplyr::data_frame(country = c("FR", "DE", "US", "FR", "DE", "US", "FR", "DE", "US"),
year = c(2011,2011,2011,2012,2012,2012,2013,2013,2013),
n = c(7000,5800,15000,6900,6000,14000,7000,6200,13000)) %>%
spread(., year, n)
cases
## # A tibble: 3 × 4
## country `2011` `2012` `2013`
## * <chr> <dbl> <dbl> <dbl>
## 1 DE 5800 6000 6200
## 2 FR 7000 6900 7000
## 3 US 15000 14000 13000
# pollution-data
pollution <- dplyr::data_frame(city = c("New York", "New York", "London", "London", "Beijing", "Beijing"),
size = c("large", "small", "large", "small", "large", "small"),
amount = c(23,14,22,16,121,56))
pollution
## # A tibble: 6 × 3
## city size amount
## <chr> <chr> <dbl>
## 1 New York large 23
## 2 New York small 14
## 3 London large 22
## 4 London small 16
## 5 Beijing large 121
## 6 Beijing small 56
# storms
storms <- dplyr::data_frame(storm = c("Alberto", "Alex", "Allison", "Ana", "Arlene", "Arthur"),
wind = c(110,45,65,40,50,45),
pressure = c(1007,1009,1005,1013,1010,1010),
date = as.Date(c("2000-08-03", "1998-07-27", "1995-06-03", "1997-06-30", "1999-06-11", "1996-06-17")))
storms
## # A tibble: 6 × 4
## storm wind pressure date
## <chr> <dbl> <dbl> <date>
## 1 Alberto 110 1007 2000-08-03
## 2 Alex 45 1009 1998-07-27
## 3 Allison 65 1005 1995-06-03
## 4 Ana 40 1013 1997-06-30
## 5 Arlene 50 1010 1999-06-11
## 6 Arthur 45 1010 1996-06-17
# songs-data
songs <- dplyr::data_frame(song = c("Across the Universe", "Come Together", "Hello, Goodbye", "Peggy Sue"),
name = c("John", "John", "Paul", "Buddy"))
songs
## # A tibble: 4 × 2
## song name
## <chr> <chr>
## 1 Across the Universe John
## 2 Come Together John
## 3 Hello, Goodbye Paul
## 4 Peggy Sue Buddy
# artists
artists <- dplyr::data_frame(name = c("George", "John", "Paul", "Ringo"),
plays = c("sitar", "guitar", "bass", "drums"))
artists
## # A tibble: 4 × 2
## name plays
## <chr> <chr>
## 1 George sitar
## 2 John guitar
## 3 Paul bass
## 4 Ringo drums
Datojen luomisen jälkeen tallenna kukin data erikseen R:n formaatissa (RDS) edellisessä kohdassa luomaasi kansioon funktiolla saveRDS() tyyliin saveRDS(object = data, file = "./_kotitehtava3/data.RDS"). (Myöhemmin voit ladata datat käyttöön tyyliin data <- readRDS(file = "./_kotitehtava3/data.RDS") #’
saveRDS(object = cases, file = "./_kotitehtava3/cases.RDS")
saveRDS(object = storms, file = "./_kotitehtava3/storms.RDS")
saveRDS(object = pollution, file = "./_kotitehtava3/pollution.RDS")
saveRDS(object = songs , file = "./_kotitehtava3/songs.RDS")
saveRDS(object = artists, file = "./_kotitehtava3/artists.RDS")
Vaikka datat ovatkin jo nyt sinun R-sessiossa objekteina. Kirjoita vielä ylläolevin ohjeiden pohjalta miten kunkin datan ladattua kansiosta kotitehtava3.
cases <- readRDS(file = "./_kotitehtava3/cases.RDS")
storms <- readRDS(file = "./_kotitehtava3/storms.RDS")
pollution <- readRDS(file = "./_kotitehtava3/pollution.RDS")
songs <- readRDS(file = "./_kotitehtava3/songs.RDS")
artists <- readRDS(file = "./_kotitehtava3/artists.RDS")
Otetaan data pollution - miten teet siitä leveän niin että se näyttää tältä
## city large small
## 1 Beijing 121 56
## 2 London 22 16
## 3 New York 23 14
spread(data=pollution, key=size, value=amount)
## # A tibble: 3 × 3
## city large small
## * <chr> <dbl> <dbl>
## 1 Beijing 121 56
## 2 London 22 16
## 3 New York 23 14
Otetaan data cases - miten teet siitä pitkän niin että se näyttää tältä
## country year n
## 1 DE 2011 5800
## 2 FR 2011 7000
## 3 US 2011 15000
## 4 DE 2012 6000
## 5 FR 2012 6900
## 6 US 2012 14000
## 7 DE 2013 6200
## 8 FR 2013 7000
## 9 US 2013 13000
gather(data=cases, key=year, value=n, 2:4)
## # A tibble: 9 × 3
## country year n
## <chr> <chr> <dbl>
## 1 DE 2011 5800
## 2 FR 2011 7000
## 3 US 2011 15000
## 4 DE 2012 6000
## 5 FR 2012 6900
## 6 US 2012 14000
## 7 DE 2013 6200
## 8 FR 2013 7000
## 9 US 2013 13000
Käytetään dataa storms. Valitse datasta kaikki muuttujat paitsi storm
storms %>% select(-storm)
## # A tibble: 6 × 3
## wind pressure date
## <dbl> <dbl> <date>
## 1 110 1007 2000-08-03
## 2 45 1009 1998-07-27
## 3 65 1005 1995-06-03
## 4 40 1013 1997-06-30
## 5 50 1010 1999-06-11
## 6 45 1010 1996-06-17
Käytetään dataa storms. Valitse datasta rivit, joilla tuulennopeus on ollut yhtäsuuri tai yli 50
filter(storms, wind >= 50)
## # A tibble: 3 × 4
## storm wind pressure date
## <chr> <dbl> <dbl> <date>
## 1 Alberto 110 1007 2000-08-03
## 2 Allison 65 1005 1995-06-03
## 3 Arlene 50 1010 1999-06-11
Käytetään dataa storms. Valitse datasta rivit, joilla joko tuulennopeus on ollut yhtäsuuri tai yli 40 TAI joiden nimi on joko Alberto tai Alex. R:ssä OR operaattori on |.
filter(storms, wind >= 40 | storm %in% c("Alberto", "Alex"))
## # A tibble: 6 × 4
## storm wind pressure date
## <chr> <dbl> <dbl> <date>
## 1 Alberto 110 1007 2000-08-03
## 2 Alex 45 1009 1998-07-27
## 3 Allison 65 1005 1995-06-03
## 4 Ana 40 1013 1997-06-30
## 5 Arlene 50 1010 1999-06-11
## 6 Arthur 45 1010 1996-06-17
Funktio contains() valitsee muuttujat, joiden nimissä on tietty merkkijono. Muuttujia valitessa ko. funktiota käytetään siis select()-funktion sisässä.
Valitse storms-datasta muuttujat joiden muuttujanimessä on kirjain t
storms %>% select(contains("t"))
## # A tibble: 6 × 2
## storm date
## <chr> <date>
## 1 Alberto 2000-08-03
## 2 Alex 1998-07-27
## 3 Allison 1995-06-03
## 4 Ana 1997-06-30
## 5 Arlene 1999-06-11
## 6 Arthur 1996-06-17
Funktiot starts_with() ja ends_with() puolestaa valitsevat muuttujat, joiden nimi joko alkaa tai päättyy tiettyyn merkkijonoon. Kuten edellä, funktiota käytetään select()-funktion sisässä.
Valitse storms-datasta muuttujat jotka päättyvät kirjaimeen e.
storms %>% select(ends_with("e"))
## # A tibble: 6 × 2
## pressure date
## <dbl> <date>
## 1 1007 2000-08-03
## 2 1009 1998-07-27
## 3 1005 1995-06-03
## 4 1013 1997-06-30
## 5 1010 1999-06-11
## 6 1010 1996-06-17
Selecting kanssa voit käyttää myös mm. seuraavia “verbejä” everything() # Select every column matches() # Select columns whose name matches a regular expression num_range() # Select columns named x1, x2, x3, x4, x5 one_of() # Select columns whose names are in a group of names
Käytä jotain em. verbeistä muuttujien valitsemiseen pollution-datasta
pollution %>% select(matches("t"))
## # A tibble: 6 × 2
## city amount
## <chr> <dbl>
## 1 New York 23
## 2 New York 14
## 3 London 22
## 4 London 16
## 5 Beijing 121
## 6 Beijing 56
Käytetään vielä storms-dataa. Luo uusi muuttuja ratio joka on ilmanpaineen ja tuulennopeuden suhde
mutate(storms, ratio = pressure / wind)
## # A tibble: 6 × 5
## storm wind pressure date ratio
## <chr> <dbl> <dbl> <date> <dbl>
## 1 Alberto 110 1007 2000-08-03 9.154545
## 2 Alex 45 1009 1998-07-27 22.422222
## 3 Allison 65 1005 1995-06-03 15.461538
## 4 Ana 40 1013 1997-06-30 25.325000
## 5 Arlene 50 1010 1999-06-11 20.200000
## 6 Arthur 45 1010 1996-06-17 22.444444
Alla on lisää näppäriä mutate()-funktion kanssa käytettäviä lisäfunktioita
pmin(), pmax() # Element-wise min and max cummin(), cummax() # Cumulative min and max cumsum(), cumprod() # Cumulative sum and product between() # Are values between a and b? cume_dist() # Cumulative distribution of values cumall(), cumany() # Cumulative all and any cummean() # Cumulative mean lead(), lag() # Copy with values one position ntile() #Bin vector into n buckets dense_rank(), min_rank(), percent_rank(), row_number() # Various ranking methods
Käyttäen storms-dataa laske uusi muuttuja kumutuuli jossa on kumulatiivinen tuulennopeus
storms %>% mutate(kumutuuli = cumsum(wind))
## # A tibble: 6 × 5
## storm wind pressure date kumutuuli
## <chr> <dbl> <dbl> <date> <dbl>
## 1 Alberto 110 1007 2000-08-03 110
## 2 Alex 45 1009 1998-07-27 155
## 3 Allison 65 1005 1995-06-03 220
## 4 Ana 40 1013 1997-06-30 260
## 5 Arlene 50 1010 1999-06-11 310
## 6 Arthur 45 1010 1996-06-17 355
Käytetään pollution dataa. Summaa data kahdeksi muuttujaksi mediaani ja varianssi, jotka siis ovat amount muuttujasta lasketutut mediaani ja varianssi.
pollution %>%
summarise(median = median(amount),
variance = var(amount))
## median variance
## 1 22.5 1731.6
yhteenvedoissa näppäriä lisäfunktioita ovat mm. seuraavat
min(), max() # Minimum and maximum values mean() # Mean value median() # Median value sum() # Sum of values var, sd() # Variance and standard deviation of a vector first() # First value in a vector last() # Last value in a vector nth() # Nth value in a vector n() # The number of values in a vector n_distinct() # The number of distinct values in a vector
Miten saat pollution``-datancity`-muuttujan erilisten arvojen määrän?
pollution %>% summarise(n_distinct(city))
## n_distinct(city)
## 1 3
Datan ryhmittely tapahtuu dplyr::group_by()-funktiolla.
Kun ryhmittelemme pollution-aineiston city-muuttujan mukaan ryhmitellyn tibble:n, jossa lukee Groups: city [3]
``
pollution %>% group_by(city)
#> Source: local data frame [6 x 3]
#> Groups: city [3]
#> city size amount
#> <chr> <chr> <dbl>
#> New York large 23
#> New York small 14
#> London large 22
#> London small 16
#> Beijing large 121
#> Beijing small 56
Jos ryhmittelet datasi ryhmittäisiä analyysejä varten, muista poistaa ryhmitys funktiolla ungroup(x), jotta ryhmittely ei häiritse seuraavia analyysejä.
Ryhmittely on jo aikaisemmista kerroista osin tuttua, mutta laske vielä pollution-datasta kullekin kaupungille amount-muuttujan keskiarvo, summa ja tapausten määrä.
pollution %>%
group_by(city) %>%
summarise(mean = mean(amount),
sum = sum(amount),
n = n())
Jatketaan vielä ryhmittelyä. Otetaan käyttöön vanha tuttu malesdata, jonka saatte kätevästi käyttöön komennolla malesdata <- readRDS(gzcon(url("http://courses.markuskainu.fi/utur2016/database/malesdata.RDS")))
Ryhmittele aineisto industry-muuttujan mukaan, laske ryhmien palkan wage mediaani ja valitse vain ryhmät joiden keskipalkka on yhtä suuri tai suurempi kuin 1.6
malesdata <- readRDS(gzcon(url("http://courses.markuskainu.fi/utur2016/database/malesdata.RDS")))
malesdata %>%
group_by(industry) %>%
summarise(median_wage = median(wage)) %>%
filter(median_wage >= 1.6)
## median_wage
## 1 1.671143
dplyr-paketin eri join-funktiot ovat näppäriä base.R merge-funktion ohella datojen yhdistämiseen
Otetaan harjoituksen alussa tehdyt datat songs ja artists ja printataan ne alkuun konsoliin
songs
#> # A tibble: 4 × 2
#> song name
#> <chr> <chr>
#> Across the Universe John
#> Come Together John
#> Hello, Goodbye Paul
#> Peggy Sue Buddy
artists
#> # A tibble: 4 × 2
#>name plays
#><chr> <chr>
#> George sitar
#> John guitar
#> Paul bass
#> Ringo drums
liitä data ensin artistin nimen mukaan funktiolla left_join()
left_join(songs,artists)
## # A tibble: 4 × 3
## song name plays
## <chr> <chr> <chr>
## 1 Across the Universe John guitar
## 2 Come Together John guitar
## 3 Hello, Goodbye Paul bass
## 4 Peggy Sue Buddy <NA>
Sitten liitä data toisiinsa kaikilla seuraavilla funktioilla - inner_join() - semi_join() - anti_join() - full_join()
inner_join(songs,artists)
## # A tibble: 3 × 3
## song name plays
## <chr> <chr> <chr>
## 1 Across the Universe John guitar
## 2 Come Together John guitar
## 3 Hello, Goodbye Paul bass
semi_join(songs,artists)
## # A tibble: 3 × 2
## song name
## <chr> <chr>
## 1 Across the Universe John
## 2 Come Together John
## 3 Hello, Goodbye Paul
anti_join(songs,artists)
## # A tibble: 1 × 2
## song name
## <chr> <chr>
## 1 Peggy Sue Buddy
full_join(songs,artists)
## # A tibble: 6 × 3
## song name plays
## <chr> <chr> <chr>
## 1 Across the Universe John guitar
## 2 Come Together John guitar
## 3 Hello, Goodbye Paul bass
## 4 Peggy Sue Buddy <NA>
## 5 <NA> George sitar
## 6 <NA> Ringo drums
Huomaatko mitkä ovat eri funktioiden erot? (Valmistaudu kertomaan vieruskaverille luennolla!)
plot(cars)
Datojen yhdistämiseen on myös erinomaisia lisäfunktioita dplyr-paketissa kuten
Tutustu niihin jos aikaa jää!
Alkukesästä avattiin kattavaa julkaisijakohtaista tietoa korkeakoulujen ja tutkimusorganisaatioiden maksamista tilaushinnoista usean vuoden ajalta. Tämä data on ladattavissa täältä: http://avaa.tdata.fi/documents/kuhiti/Publisher_Costs_FI_Full_Data.csv
Lue csv-tiedosto R:ään ja laske Turun yliopiston (University of Turku) vuosittaiset kustannukset
d <- read.csv("http://avaa.tdata.fi/documents/kuhiti/Publisher_Costs_FI_Full_Data.csv", stringsAsFactors = FALSE)
d %>% filter(Organization.name == "University of Turku") %>% # filtteroidaan utu
group_by(Year) %>% # ryhmitellään vuoden mukaan
summarise(kustannukset = sum(Cost, na.rm=TRUE)) # kustannusten summa
## kustannukset
## 1 11044857
Valitse kaikki ammattikorkeakoulut ja laske niiden vuosittaiset kustannukset
d %>% filter(grepl("Applied Sciences", Organization.name)) %>% # valitaan ammattikorkeakoulut. Voisi ja kannattaisi käyttää `Organization.type` muuttujaa
group_by(Year) %>%
summarise(kustannukset = sum(Cost, na.rm = TRUE))
## kustannukset
## 1 12750613
Valitse kaikki julkaisijat (muuttuja Publisher.Supplier) joissa on sana American (muista grepl-funktio) ja laske niiden vuosittaiset kustannukset eri yliopistoissa **
d %>% filter(grepl("American", Publisher.Supplier), Organization.type == "University") %>% # kaksi filtterointiehtoa
group_by(Organization.name,Year) %>% # ryhmittely
summarise(kustannukset = sum(Cost, na.rm = TRUE)) # summa
## kustannukset
## 1 4710050
Lataa FAOSTAT-tietokannasta zipattu .csv data osoitteesta http://faostat3.fao.org/faostat-bulkdownloads/Production_Livestock_E_All_Data.zip ja pura se koneellasi (funktio unzip()), ja lataa csv-koneellesi. (hätätapauksessa data löytyy myös: http://courses.markuskainu.fi/utur2016/database/Production_Livestock_E_All_Data.csv)
Poista datasta ensin kaikki ns. flag muuttujat eli muotoa Y1961F tai Y2010F olevat muuttujat (jotka loppuvat F:ään). Sitten käännä data pitkään muotoon
Kun data on oikeassa formaatissa selvitä montako sikaa pohjoismaissa on tuotettu vuosittain vuosina 2000-2012 ja mikä pohjoismaiden sikatuotannon osuus on ollut koko maailman tuotetuista sioista noina vuosina
if (!file.exists("./_kotitehtava3/Production_Livestock_E_All_Data.csv")){
download.file("http://fenixservices.fao.org/faostat/static/bulkdownloads/Production_Livestock_E_All_Data.zip",
destfile="./_kotitehtava3/Production_Livestock_E_All_Data.zip")
unzip("./_kotitehtava3/Production_Livestock_E_All_Data.zip", exdir = "./_kotitehtava3")
}
d <- read_csv("./_kotitehtava3/Production_Livestock_E_All_Data.csv")
d %>% select(-ends_with("F")) %>% # jätetään F:ään päättyvät muuttujat pois
gather(., key = year, value = value, 8:61) %>% # tsekataan montako muuttujaa on ja että monesko on eka vuosimuuttuja
mutate(year = gsub("Y","",year), # Y:t veke vuodesta
year = as.integer(year)) %>% # vuodet kirjaimesta a numeerisesta
filter(Item %in% "Pigs", # valitaa siat
Unit %in% "Head", # yksikkö päätä
year %in% 2000:2012, # valitaan vuodet
Country %in% c("Finland","Sweden","Norway","Iceland","Denmark")) %>% # valitaan maat
select(Country,year,value) %>% # pudotetaan muuttujia pois
arrange(Country,year) # järjestetään kivasti
d %>% select(-ends_with("F")) %>%
gather(., key = year, value = value, 8:61) %>%
mutate(year = gsub("Y","",year),
year = as.integer(year)) %>%
filter(Item %in% "Pigs",
Unit %in% "Head",
year %in% 2000:2012) %>%
# seuraavaksi luodaan uusi muuttuja ifelse-komennolla jossa mikäli rivi kuuluu
# pohjoismaihin cntry_group saa arvon `nordic`, muussa gtapauksessa `non-nordic`
mutate(cntry_group = ifelse(Country %in% c("Finland","Sweden","Norway","Iceland","Denmark"), "nordic", "non-nordic")) %>%
group_by(year,cntry_group) %>% # ryhmitellään vuoden ja maaryhmän mukaan
summarise(pig_sum = sum(value, na.rm=TRUE)) %>% # summataan ryhmien tasolle määrät
ungroup() %>% group_by(year) %>% # puretaan ryhmitys ja ryhmitellään uudestaan vuosien tasolle
mutate(total = sum(pig_sum, na.rm=TRUE)) %>% # tehdään uusi summamuuttuja jossa koko maailman siat vuosittain
filter(cntry_group %in% "nordic") %>% # valitaana pelkät pohjoismaa-rivit ja
mutate(nordic_share = round(pig_sum / total * 100,2)) %>% # lasketaan suhteellinen osuus
select(year,nordic_share) #%>% ggplot(., aes(x=year,y=nordic_share)) + geom_line() # vielä viivakuvio loppuun!
Luxembourg income study on julkaissut eriarvoisuusdatan yhdessä NY Timesin kanssa nimeltä LIS / New York Times Income Distribution Database (2016), jonka pohjalta on tehty mm. juttu http://www.nytimes.com/2014/04/23/upshot/the-american-middle-class-is-no-longer-the-worlds-richest.html sekä itse datasta on kirjoitettu tämä http://www.nytimes.com/2014/04/23/upshot/about-the-data.html ja tämä http://www.nytimes.com/2014/04/23/upshot/back-story-how-we-found-the-income-data.html
Data itsessään on monivälilehtisenä ekselinä täällä http://www.lisdatacenter.org/wp-content/uploads/resources-other-nyt.xlsx. Viidenneltä välilehdeltä löytyy keskiarvoistettuja ostovoimapariteettikorjattuja tulodesiilien rajoja sekä a) per capita että b) ekvivalisoituna kotitalouden jäsentä kohtaan sekä c) koko kotitalouden tasolla.
Alla on esimerkki siitä millaiseen muoton ko. 5 välilehden data tulisi saada.
| data | country | year | class | variable | value |
|---|---|---|---|---|---|
| LIS | Australia | 1981 | Mean Income per Capita (PPP), 2011 PPP dollars | Decile 1 | 3556 |
| LIS | Australia | 1985 | Mean Income per Capita (PPP), 2011 PPP dollars | Decile 1 | 3612 |
| LIS | Australia | 1989 | Mean Income per Capita (PPP), 2011 PPP dollars | Decile 1 | 3601 |
| LIS | Australia | 1995 | Mean Income per Capita (PPP), 2011 PPP dollars | Decile 1 | 3377 |
| LIS | Australia | 2001 | Mean Income per Capita (PPP), 2011 PPP dollars | Decile 1 | 3813 |
| LIS | Australia | 2003 | Mean Income per Capita (PPP), 2011 PPP dollars | Decile 1 | 3984 |
Miten saan ladattua ko. datan ja muokattua sen ylläolevan esimerkin mukaiseen tidy-muotoon?
if (!file.exists("./_kotitehtava3/resources-other-nyt.xlsx")){
download.file("http://www.lisdatacenter.org/wp-content/uploads/resources-other-nyt.xlsx",
destfile="./_kotitehtava3/resources-other-nyt.xlsx")
}
d <- d1 <- readxl::read_excel(path = "./_kotitehtava3/resources-other-nyt.xlsx", sheet=5)
names(d) <- d1[1,]
d <- d[-1,]
d[1:11] %>% separate(col=dataset, sep = " ", into = c("data","remove","country","year")) %>%
select(-remove) %>% mutate(year = as.integer(year)) %>% mutate(class=names(d1)[1]) %>%
bind_rows(.,d[12:22] %>% separate(col=dataset, sep = " ", into = c("data","remove","country","year")) %>%
select(-remove) %>% mutate(year = as.integer(year)) %>% mutate(class=names(d1)[12])) %>%
bind_rows(.,d[23:33] %>% separate(col=dataset, sep = " ", into = c("data","remove","country","year")) %>%
select(-remove) %>% mutate(year = as.integer(year)) %>% mutate(class=names(d1)[23])) %>%
tidyr::gather(., key = variable, value = value, 4:13)
## # A tibble: 5,310 × 6
## data country year class
## <chr> <chr> <int> <chr>
## 1 LIS Australia 1981 Mean Income per Capita (PPP), 2011 PPP dollars
## 2 LIS Australia 1985 Mean Income per Capita (PPP), 2011 PPP dollars
## 3 LIS Australia 1989 Mean Income per Capita (PPP), 2011 PPP dollars
## 4 LIS Australia 1995 Mean Income per Capita (PPP), 2011 PPP dollars
## 5 LIS Australia 2001 Mean Income per Capita (PPP), 2011 PPP dollars
## 6 LIS Australia 2003 Mean Income per Capita (PPP), 2011 PPP dollars
## 7 LIS Australia 2008 Mean Income per Capita (PPP), 2011 PPP dollars
## 8 LIS Australia 2010 Mean Income per Capita (PPP), 2011 PPP dollars
## 9 LIS Austria 1987 Mean Income per Capita (PPP), 2011 PPP dollars
## 10 LIS Austria 1994 Mean Income per Capita (PPP), 2011 PPP dollars
## # ... with 5,300 more rows, and 2 more variables: variable <chr>,
## # value <chr>
2016 Markus Kainu.
Tämä teos on lisensoitu Creative Commons Nimeä 4.0 Kansainvälinen -lisenssillä.
Tämä sivusto on tehty R:ssä Rmarkdown-paketin uusimmassa kehitysversion uudella render_site()`-funktiolla, jonka tekee staattisten responsiivisten verkkosivujen tekemisen helpoksi. Katso ohjeet: