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 tibble
objektia 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``-datan
city`-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: