Yksinkertaiset taulukot
library(tidyverse)
sw <- dplyr::starwars
# yhden muuttujan luokkien frekvenssit
as.data.frame(
table(sw$species, useNA = "ifany")
)
## Var1 Freq
## 1 Aleena 1
## 2 Besalisk 1
## 3 Cerean 1
## 4 Chagrian 1
## 5 Clawdite 1
## 6 Droid 5
## 7 Dug 1
## 8 Ewok 1
## 9 Geonosian 1
## 10 Gungan 3
## 11 Human 35
## 12 Hutt 1
## 13 Iktotchi 1
## 14 Kaleesh 1
## 15 Kaminoan 2
## 16 Kel Dor 1
## 17 Mirialan 2
## 18 Mon Calamari 1
## 19 Muun 1
## 20 Nautolan 1
## 21 Neimodian 1
## 22 Pau'an 1
## 23 Quermian 1
## 24 Rodian 1
## 25 Skakoan 1
## 26 Sullustan 1
## 27 Tholothian 1
## 28 Togruta 1
## 29 Toong 1
## 30 Toydarian 1
## 31 Trandoshan 1
## 32 Twi'lek 2
## 33 Vulptereen 1
## 34 Wookiee 2
## 35 Xexto 1
## 36 Yoda's species 1
## 37 Zabrak 2
## 38 <NA> 5
# OR
sw %>% count(species)
## # A tibble: 38 x 2
## species n
## <chr> <int>
## 1 Aleena 1
## 2 Besalisk 1
## 3 Cerean 1
## 4 Chagrian 1
## 5 Clawdite 1
## 6 Droid 5
## 7 Dug 1
## 8 Ewok 1
## 9 Geonosian 1
## 10 Gungan 3
## # ... with 28 more rows
# yhden muuttujan luokkien osuudet
as.data.frame(
prop.table(table(sw$species, useNA = "ifany"))*100
)
## Var1 Freq
## 1 Aleena 1.149425
## 2 Besalisk 1.149425
## 3 Cerean 1.149425
## 4 Chagrian 1.149425
## 5 Clawdite 1.149425
## 6 Droid 5.747126
## 7 Dug 1.149425
## 8 Ewok 1.149425
## 9 Geonosian 1.149425
## 10 Gungan 3.448276
## 11 Human 40.229885
## 12 Hutt 1.149425
## 13 Iktotchi 1.149425
## 14 Kaleesh 1.149425
## 15 Kaminoan 2.298851
## 16 Kel Dor 1.149425
## 17 Mirialan 2.298851
## 18 Mon Calamari 1.149425
## 19 Muun 1.149425
## 20 Nautolan 1.149425
## 21 Neimodian 1.149425
## 22 Pau'an 1.149425
## 23 Quermian 1.149425
## 24 Rodian 1.149425
## 25 Skakoan 1.149425
## 26 Sullustan 1.149425
## 27 Tholothian 1.149425
## 28 Togruta 1.149425
## 29 Toong 1.149425
## 30 Toydarian 1.149425
## 31 Trandoshan 1.149425
## 32 Twi'lek 2.298851
## 33 Vulptereen 1.149425
## 34 Wookiee 2.298851
## 35 Xexto 1.149425
## 36 Yoda's species 1.149425
## 37 Zabrak 2.298851
## 38 <NA> 5.747126
# OR
sw %>% count(species) %>%
mutate(share = n/sum(n)*100)
## # A tibble: 38 x 3
## species n share
## <chr> <int> <dbl>
## 1 Aleena 1 1.15
## 2 Besalisk 1 1.15
## 3 Cerean 1 1.15
## 4 Chagrian 1 1.15
## 5 Clawdite 1 1.15
## 6 Droid 5 5.75
## 7 Dug 1 1.15
## 8 Ewok 1 1.15
## 9 Geonosian 1 1.15
## 10 Gungan 3 3.45
## # ... with 28 more rows
# kahden muuttujan luokkien frekvenssit
as.data.frame(
table(sw$species,sw$gender, useNA = "ifany")
)
## Var1 Var2 Freq
## 1 Aleena female 0
## 2 Besalisk female 0
## 3 Cerean female 0
## 4 Chagrian female 0
## 5 Clawdite female 1
## 6 Droid female 0
## 7 Dug female 0
## 8 Ewok female 0
## 9 Geonosian female 0
## 10 Gungan female 0
## 11 Human female 9
## 12 Hutt female 0
## 13 Iktotchi female 0
## 14 Kaleesh female 0
## 15 Kaminoan female 1
## 16 Kel Dor female 0
## 17 Mirialan female 2
## 18 Mon Calamari female 0
## 19 Muun female 0
## 20 Nautolan female 0
## 21 Neimodian female 0
## 22 Pau'an female 0
## 23 Quermian female 0
## 24 Rodian female 0
## 25 Skakoan female 0
## 26 Sullustan female 0
## 27 Tholothian female 1
## 28 Togruta female 1
## 29 Toong female 0
## 30 Toydarian female 0
## 31 Trandoshan female 0
## 32 Twi'lek female 1
## 33 Vulptereen female 0
## 34 Wookiee female 0
## 35 Xexto female 0
## 36 Yoda's species female 0
## 37 Zabrak female 0
## 38 <NA> female 3
## 39 Aleena hermaphrodite 0
## 40 Besalisk hermaphrodite 0
## 41 Cerean hermaphrodite 0
## 42 Chagrian hermaphrodite 0
## 43 Clawdite hermaphrodite 0
## 44 Droid hermaphrodite 0
## 45 Dug hermaphrodite 0
## 46 Ewok hermaphrodite 0
## 47 Geonosian hermaphrodite 0
## 48 Gungan hermaphrodite 0
## 49 Human hermaphrodite 0
## 50 Hutt hermaphrodite 1
## 51 Iktotchi hermaphrodite 0
## 52 Kaleesh hermaphrodite 0
## 53 Kaminoan hermaphrodite 0
## 54 Kel Dor hermaphrodite 0
## 55 Mirialan hermaphrodite 0
## 56 Mon Calamari hermaphrodite 0
## 57 Muun hermaphrodite 0
## 58 Nautolan hermaphrodite 0
## 59 Neimodian hermaphrodite 0
## 60 Pau'an hermaphrodite 0
## 61 Quermian hermaphrodite 0
## 62 Rodian hermaphrodite 0
## 63 Skakoan hermaphrodite 0
## 64 Sullustan hermaphrodite 0
## 65 Tholothian hermaphrodite 0
## 66 Togruta hermaphrodite 0
## 67 Toong hermaphrodite 0
## 68 Toydarian hermaphrodite 0
## 69 Trandoshan hermaphrodite 0
## 70 Twi'lek hermaphrodite 0
## 71 Vulptereen hermaphrodite 0
## 72 Wookiee hermaphrodite 0
## 73 Xexto hermaphrodite 0
## 74 Yoda's species hermaphrodite 0
## 75 Zabrak hermaphrodite 0
## 76 <NA> hermaphrodite 0
## 77 Aleena male 1
## 78 Besalisk male 1
## 79 Cerean male 1
## 80 Chagrian male 1
## 81 Clawdite male 0
## 82 Droid male 0
## 83 Dug male 1
## 84 Ewok male 1
## 85 Geonosian male 1
## 86 Gungan male 3
## 87 Human male 26
## 88 Hutt male 0
## 89 Iktotchi male 1
## 90 Kaleesh male 1
## 91 Kaminoan male 1
## 92 Kel Dor male 1
## 93 Mirialan male 0
## 94 Mon Calamari male 1
## 95 Muun male 1
## 96 Nautolan male 1
## 97 Neimodian male 1
## 98 Pau'an male 1
## 99 Quermian male 1
## 100 Rodian male 1
## 101 Skakoan male 1
## 102 Sullustan male 1
## 103 Tholothian male 0
## 104 Togruta male 0
## 105 Toong male 1
## 106 Toydarian male 1
## 107 Trandoshan male 1
## 108 Twi'lek male 1
## 109 Vulptereen male 1
## 110 Wookiee male 2
## 111 Xexto male 1
## 112 Yoda's species male 1
## 113 Zabrak male 2
## 114 <NA> male 2
## 115 Aleena none 0
## 116 Besalisk none 0
## 117 Cerean none 0
## 118 Chagrian none 0
## 119 Clawdite none 0
## 120 Droid none 2
## 121 Dug none 0
## 122 Ewok none 0
## 123 Geonosian none 0
## 124 Gungan none 0
## 125 Human none 0
## 126 Hutt none 0
## 127 Iktotchi none 0
## 128 Kaleesh none 0
## 129 Kaminoan none 0
## 130 Kel Dor none 0
## 131 Mirialan none 0
## 132 Mon Calamari none 0
## 133 Muun none 0
## 134 Nautolan none 0
## 135 Neimodian none 0
## 136 Pau'an none 0
## 137 Quermian none 0
## 138 Rodian none 0
## 139 Skakoan none 0
## 140 Sullustan none 0
## 141 Tholothian none 0
## 142 Togruta none 0
## 143 Toong none 0
## 144 Toydarian none 0
## 145 Trandoshan none 0
## 146 Twi'lek none 0
## 147 Vulptereen none 0
## 148 Wookiee none 0
## 149 Xexto none 0
## 150 Yoda's species none 0
## 151 Zabrak none 0
## 152 <NA> none 0
## 153 Aleena <NA> 0
## 154 Besalisk <NA> 0
## 155 Cerean <NA> 0
## 156 Chagrian <NA> 0
## 157 Clawdite <NA> 0
## 158 Droid <NA> 3
## 159 Dug <NA> 0
## 160 Ewok <NA> 0
## 161 Geonosian <NA> 0
## 162 Gungan <NA> 0
## 163 Human <NA> 0
## 164 Hutt <NA> 0
## 165 Iktotchi <NA> 0
## 166 Kaleesh <NA> 0
## 167 Kaminoan <NA> 0
## 168 Kel Dor <NA> 0
## 169 Mirialan <NA> 0
## 170 Mon Calamari <NA> 0
## 171 Muun <NA> 0
## 172 Nautolan <NA> 0
## 173 Neimodian <NA> 0
## 174 Pau'an <NA> 0
## 175 Quermian <NA> 0
## 176 Rodian <NA> 0
## 177 Skakoan <NA> 0
## 178 Sullustan <NA> 0
## 179 Tholothian <NA> 0
## 180 Togruta <NA> 0
## 181 Toong <NA> 0
## 182 Toydarian <NA> 0
## 183 Trandoshan <NA> 0
## 184 Twi'lek <NA> 0
## 185 Vulptereen <NA> 0
## 186 Wookiee <NA> 0
## 187 Xexto <NA> 0
## 188 Yoda's species <NA> 0
## 189 Zabrak <NA> 0
## 190 <NA> <NA> 0
# Or
sw %>%
group_by(species) %>%
count(gender)
## # A tibble: 43 x 3
## # Groups: species [38]
## species gender n
## <chr> <chr> <int>
## 1 Aleena male 1
## 2 Besalisk male 1
## 3 Cerean male 1
## 4 Chagrian male 1
## 5 Clawdite female 1
## 6 Droid none 2
## 7 Droid <NA> 3
## 8 Dug male 1
## 9 Ewok male 1
## 10 Geonosian male 1
## # ... with 33 more rows
# kahden muuttujan luokkien frekvenssit
prop.table(table(sw$species,sw$gender))
##
## female hermaphrodite male none
## Aleena 0.00000000 0.00000000 0.01265823 0.00000000
## Besalisk 0.00000000 0.00000000 0.01265823 0.00000000
## Cerean 0.00000000 0.00000000 0.01265823 0.00000000
## Chagrian 0.00000000 0.00000000 0.01265823 0.00000000
## Clawdite 0.01265823 0.00000000 0.00000000 0.00000000
## Droid 0.00000000 0.00000000 0.00000000 0.02531646
## Dug 0.00000000 0.00000000 0.01265823 0.00000000
## Ewok 0.00000000 0.00000000 0.01265823 0.00000000
## Geonosian 0.00000000 0.00000000 0.01265823 0.00000000
## Gungan 0.00000000 0.00000000 0.03797468 0.00000000
## Human 0.11392405 0.00000000 0.32911392 0.00000000
## Hutt 0.00000000 0.01265823 0.00000000 0.00000000
## Iktotchi 0.00000000 0.00000000 0.01265823 0.00000000
## Kaleesh 0.00000000 0.00000000 0.01265823 0.00000000
## Kaminoan 0.01265823 0.00000000 0.01265823 0.00000000
## Kel Dor 0.00000000 0.00000000 0.01265823 0.00000000
## Mirialan 0.02531646 0.00000000 0.00000000 0.00000000
## Mon Calamari 0.00000000 0.00000000 0.01265823 0.00000000
## Muun 0.00000000 0.00000000 0.01265823 0.00000000
## Nautolan 0.00000000 0.00000000 0.01265823 0.00000000
## Neimodian 0.00000000 0.00000000 0.01265823 0.00000000
## Pau'an 0.00000000 0.00000000 0.01265823 0.00000000
## Quermian 0.00000000 0.00000000 0.01265823 0.00000000
## Rodian 0.00000000 0.00000000 0.01265823 0.00000000
## Skakoan 0.00000000 0.00000000 0.01265823 0.00000000
## Sullustan 0.00000000 0.00000000 0.01265823 0.00000000
## Tholothian 0.01265823 0.00000000 0.00000000 0.00000000
## Togruta 0.01265823 0.00000000 0.00000000 0.00000000
## Toong 0.00000000 0.00000000 0.01265823 0.00000000
## Toydarian 0.00000000 0.00000000 0.01265823 0.00000000
## Trandoshan 0.00000000 0.00000000 0.01265823 0.00000000
## Twi'lek 0.01265823 0.00000000 0.01265823 0.00000000
## Vulptereen 0.00000000 0.00000000 0.01265823 0.00000000
## Wookiee 0.00000000 0.00000000 0.02531646 0.00000000
## Xexto 0.00000000 0.00000000 0.01265823 0.00000000
## Yoda's species 0.00000000 0.00000000 0.01265823 0.00000000
## Zabrak 0.00000000 0.00000000 0.02531646 0.00000000
prop.table(table(sw$species,sw$gender),1)
##
## female hermaphrodite male none
## Aleena 0.0000000 0.0000000 1.0000000 0.0000000
## Besalisk 0.0000000 0.0000000 1.0000000 0.0000000
## Cerean 0.0000000 0.0000000 1.0000000 0.0000000
## Chagrian 0.0000000 0.0000000 1.0000000 0.0000000
## Clawdite 1.0000000 0.0000000 0.0000000 0.0000000
## Droid 0.0000000 0.0000000 0.0000000 1.0000000
## Dug 0.0000000 0.0000000 1.0000000 0.0000000
## Ewok 0.0000000 0.0000000 1.0000000 0.0000000
## Geonosian 0.0000000 0.0000000 1.0000000 0.0000000
## Gungan 0.0000000 0.0000000 1.0000000 0.0000000
## Human 0.2571429 0.0000000 0.7428571 0.0000000
## Hutt 0.0000000 1.0000000 0.0000000 0.0000000
## Iktotchi 0.0000000 0.0000000 1.0000000 0.0000000
## Kaleesh 0.0000000 0.0000000 1.0000000 0.0000000
## Kaminoan 0.5000000 0.0000000 0.5000000 0.0000000
## Kel Dor 0.0000000 0.0000000 1.0000000 0.0000000
## Mirialan 1.0000000 0.0000000 0.0000000 0.0000000
## Mon Calamari 0.0000000 0.0000000 1.0000000 0.0000000
## Muun 0.0000000 0.0000000 1.0000000 0.0000000
## Nautolan 0.0000000 0.0000000 1.0000000 0.0000000
## Neimodian 0.0000000 0.0000000 1.0000000 0.0000000
## Pau'an 0.0000000 0.0000000 1.0000000 0.0000000
## Quermian 0.0000000 0.0000000 1.0000000 0.0000000
## Rodian 0.0000000 0.0000000 1.0000000 0.0000000
## Skakoan 0.0000000 0.0000000 1.0000000 0.0000000
## Sullustan 0.0000000 0.0000000 1.0000000 0.0000000
## Tholothian 1.0000000 0.0000000 0.0000000 0.0000000
## Togruta 1.0000000 0.0000000 0.0000000 0.0000000
## Toong 0.0000000 0.0000000 1.0000000 0.0000000
## Toydarian 0.0000000 0.0000000 1.0000000 0.0000000
## Trandoshan 0.0000000 0.0000000 1.0000000 0.0000000
## Twi'lek 0.5000000 0.0000000 0.5000000 0.0000000
## Vulptereen 0.0000000 0.0000000 1.0000000 0.0000000
## Wookiee 0.0000000 0.0000000 1.0000000 0.0000000
## Xexto 0.0000000 0.0000000 1.0000000 0.0000000
## Yoda's species 0.0000000 0.0000000 1.0000000 0.0000000
## Zabrak 0.0000000 0.0000000 1.0000000 0.0000000
prop.table(table(sw$species,sw$gender),2)
##
## female hermaphrodite male none
## Aleena 0.00000000 0.00000000 0.01666667 0.00000000
## Besalisk 0.00000000 0.00000000 0.01666667 0.00000000
## Cerean 0.00000000 0.00000000 0.01666667 0.00000000
## Chagrian 0.00000000 0.00000000 0.01666667 0.00000000
## Clawdite 0.06250000 0.00000000 0.00000000 0.00000000
## Droid 0.00000000 0.00000000 0.00000000 1.00000000
## Dug 0.00000000 0.00000000 0.01666667 0.00000000
## Ewok 0.00000000 0.00000000 0.01666667 0.00000000
## Geonosian 0.00000000 0.00000000 0.01666667 0.00000000
## Gungan 0.00000000 0.00000000 0.05000000 0.00000000
## Human 0.56250000 0.00000000 0.43333333 0.00000000
## Hutt 0.00000000 1.00000000 0.00000000 0.00000000
## Iktotchi 0.00000000 0.00000000 0.01666667 0.00000000
## Kaleesh 0.00000000 0.00000000 0.01666667 0.00000000
## Kaminoan 0.06250000 0.00000000 0.01666667 0.00000000
## Kel Dor 0.00000000 0.00000000 0.01666667 0.00000000
## Mirialan 0.12500000 0.00000000 0.00000000 0.00000000
## Mon Calamari 0.00000000 0.00000000 0.01666667 0.00000000
## Muun 0.00000000 0.00000000 0.01666667 0.00000000
## Nautolan 0.00000000 0.00000000 0.01666667 0.00000000
## Neimodian 0.00000000 0.00000000 0.01666667 0.00000000
## Pau'an 0.00000000 0.00000000 0.01666667 0.00000000
## Quermian 0.00000000 0.00000000 0.01666667 0.00000000
## Rodian 0.00000000 0.00000000 0.01666667 0.00000000
## Skakoan 0.00000000 0.00000000 0.01666667 0.00000000
## Sullustan 0.00000000 0.00000000 0.01666667 0.00000000
## Tholothian 0.06250000 0.00000000 0.00000000 0.00000000
## Togruta 0.06250000 0.00000000 0.00000000 0.00000000
## Toong 0.00000000 0.00000000 0.01666667 0.00000000
## Toydarian 0.00000000 0.00000000 0.01666667 0.00000000
## Trandoshan 0.00000000 0.00000000 0.01666667 0.00000000
## Twi'lek 0.06250000 0.00000000 0.01666667 0.00000000
## Vulptereen 0.00000000 0.00000000 0.01666667 0.00000000
## Wookiee 0.00000000 0.00000000 0.03333333 0.00000000
## Xexto 0.00000000 0.00000000 0.01666667 0.00000000
## Yoda's species 0.00000000 0.00000000 0.01666667 0.00000000
## Zabrak 0.00000000 0.00000000 0.03333333 0.00000000
# Jatkuvan pilkkominen luokkiin
sw$pituus_lk[sw$height < 100] <- "alle metrin"
sw$pituus_lk[sw$height >= 100 & sw$height < 150] <- "metristä puoleentoista"
sw$pituus_lk[sw$height >= 150 & sw$height < 200] <- "puolestatoista kahteen metriin"
sw$pituus_lk[sw$height >= 200] <- "yli kaksi metriä"
table(sw$pituus_lk, useNA = "ifany")
##
## alle metrin metristä puoleentoista
## 7 3
## puolestatoista kahteen metriin yli kaksi metriä
## 60 11
## <NA>
## 6
sw <- sw %>%
mutate(height_lk = case_when(
height < 100 ~ "alle metrin",
height >= 100 & height < 150 ~ "metristä puoleentoista",
height >= 150 & height < 200 ~ "puolestatoista kahteen metriin",
height >= 200 ~ "yli kaksi metriä",
TRUE ~ "ei pituutta datassa"
))
sw %>% count(height_lk)
## # A tibble: 5 x 2
## height_lk n
## <chr> <int>
## 1 alle metrin 7
## 2 ei pituutta datassa 6
## 3 metristä puoleentoista 3
## 4 puolestatoista kahteen metriin 60
## 5 yli kaksi metriä 11
library(tidyverse)
## ------------------------------------------------------------------------
sw <- dplyr::starwars
# str(sw)
# summary(sw)
## ------------------------------------------------------------------------
head(sw)
## # A tibble: 6 x 13
## name height mass hair_color skin_color eye_color birth_year gender
## <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr>
## 1 Luke Sky… 172 77. blond fair blue 19.0 male
## 2 C-3PO 167 75. <NA> gold yellow 112. <NA>
## 3 R2-D2 96 32. <NA> white, bl… red 33.0 <NA>
## 4 Darth Va… 202 136. none white yellow 41.9 male
## 5 Leia Org… 150 49. brown light brown 19.0 female
## 6 Owen Lars 178 120. brown, gr… light blue 52.0 male
## # ... with 5 more variables: homeworld <chr>, species <chr>, films <list>,
## # vehicles <list>, starships <list>
## ------------------------------------------------------------------------
sw %>% filter(species == "Human")
## # A tibble: 35 x 13
## name height mass hair_color skin_color eye_color birth_year gender
## <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr>
## 1 Luke Sk… 172 77. blond fair blue 19.0 male
## 2 Darth V… 202 136. none white yellow 41.9 male
## 3 Leia Or… 150 49. brown light brown 19.0 female
## 4 Owen La… 178 120. brown, gr… light blue 52.0 male
## 5 Beru Wh… 165 75. brown light blue 47.0 female
## 6 Biggs D… 183 84. black light brown 24.0 male
## 7 Obi-Wan… 182 77. auburn, w… fair blue-gray 57.0 male
## 8 Anakin … 188 84. blond fair blue 41.9 male
## 9 Wilhuff… 180 NA auburn, g… fair blue 64.0 male
## 10 Han Solo 180 80. brown fair brown 29.0 male
## # ... with 25 more rows, and 5 more variables: homeworld <chr>,
## # species <chr>, films <list>, vehicles <list>, starships <list>
## ------------------------------------------------------------------------
sw %>% filter(species %in% c("Human","Droid"))
## # A tibble: 40 x 13
## name height mass hair_color skin_color eye_color birth_year gender
## <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr>
## 1 Luke Sk… 172 77. blond fair blue 19.0 male
## 2 C-3PO 167 75. <NA> gold yellow 112. <NA>
## 3 R2-D2 96 32. <NA> white, bl… red 33.0 <NA>
## 4 Darth V… 202 136. none white yellow 41.9 male
## 5 Leia Or… 150 49. brown light brown 19.0 female
## 6 Owen La… 178 120. brown, gr… light blue 52.0 male
## 7 Beru Wh… 165 75. brown light blue 47.0 female
## 8 R5-D4 97 32. <NA> white, red red NA <NA>
## 9 Biggs D… 183 84. black light brown 24.0 male
## 10 Obi-Wan… 182 77. auburn, w… fair blue-gray 57.0 male
## # ... with 30 more rows, and 5 more variables: homeworld <chr>,
## # species <chr>, films <list>, vehicles <list>, starships <list>
## ------------------------------------------------------------------------
rodut <- c("Human","Droid","Wookiee","Rodian","Hutt","Yoda's species","Trandoshan",
"Mon Calamari","Ewok","Sullustan","Neimodian","Gungan","NA","Toydarian",
"Dug","Zabrak","Twi'lek","Vulptereen","Xexto","Toong","Cerean","Nautolan",
"Tholothian","Iktotchi","Quermian","Kel Dor","Chagrian","Geonosian","Mirialan",
"Clawdite","Besalisk","Kaminoan","Aleena","Skakoan","Muun","Togruta","Kaleesh","Pau'an")
grep("n", rodut) # indeksit
## [1] 1 4 7 8 10 11 12 14 18 20 21 22 23 25 27 28 29 32 33 34 35 38
grep("n", rodut, value=TRUE) # arvot
## [1] "Human" "Rodian" "Trandoshan" "Mon Calamari"
## [5] "Sullustan" "Neimodian" "Gungan" "Toydarian"
## [9] "Vulptereen" "Toong" "Cerean" "Nautolan"
## [13] "Tholothian" "Quermian" "Chagrian" "Geonosian"
## [17] "Mirialan" "Kaminoan" "Aleena" "Skakoan"
## [21] "Muun" "Pau'an"
## ------------------------------------------------------------------------
grep("k$", rodut, value=TRUE)
## [1] "Ewok" "Zabrak" "Twi'lek" "Besalisk"
## ------------------------------------------------------------------------
grepl("k$", rodut)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
## [12] FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
## [23] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
## [34] FALSE FALSE FALSE FALSE FALSE
# filtteroi rivit regular expressioilla
sw[grepl("k$", sw$species),c("name","species")]
## # A tibble: 6 x 2
## name species
## <chr> <chr>
## 1 Wicket Systri Warrick Ewok
## 2 Darth Maul Zabrak
## 3 Bib Fortuna Twi'lek
## 4 Ayla Secura Twi'lek
## 5 Eeth Koth Zabrak
## 6 Dexter Jettster Besalisk
# Or
sw %>% filter(grepl("k$", species)) %>% select(name,species)
## # A tibble: 6 x 2
## name species
## <chr> <chr>
## 1 Wicket Systri Warrick Ewok
## 2 Darth Maul Zabrak
## 3 Bib Fortuna Twi'lek
## 4 Ayla Secura Twi'lek
## 5 Eeth Koth Zabrak
## 6 Dexter Jettster Besalisk
## ------------------------------------------------------------------------
grep("^hair", names(sw), value=TRUE)
## [1] "hair_color"
makenoise <- function(n, selection = letters, length = 5){
apply(replicate(n, sample(c(selection, ""), length, replace=TRUE, prob=c(rep(0.7/length(selection), length(selection)), .3))), 2, paste0, collapse="")
}
n <- 10
noisystring <- paste0(makenoise(n), sample(1990:2015, n, rep=T), makenoise(n))
## ------------------------------------------------------------------------
noisystring
## [1] "rei1996lpe" "zxgf2000ijhy" "knglb2008isxqp" "fk1995pbr"
## [5] "tgh1998pmpd" "e2014tebyd" "ku1998ifxa" "nboc2004qtngg"
## [9] "vzrc2013hpc" "kam2007lb"
## ------------------------------------------------------------------------
gsub("[a-zA-Z]", "", noisystring)
## [1] "1996" "2000" "2008" "1995" "1998" "2014" "1998" "2004" "2013" "2007"
n <- 10
selection <- c(letters, "&", "_")
noisystring2 <- paste0(makenoise(n, selection), sample(1990:2015, n, rep=T), makenoise(n, selection))
## ------------------------------------------------------------------------
noisystring2
## [1] "c_ed1992flx" "yanf1998bls" "auhk2001dnrz" "rfywo2007yeiab"
## [5] "ovggg2001_hxc" "zeb2008wurg" "xgrh2015fa" "xzdu1991mamu"
## [9] "_ti2013xlb" "tbsz2000_d"
## ------------------------------------------------------------------------
gsub("[^0-9]", "", noisystring2)
## [1] "1992" "1998" "2001" "2007" "2001" "2008" "2015" "1991" "2013" "2000"
noisydata <- data_frame(noisystring,noisystring2)
noisydata$noisydata_numbers <- gsub("[^0-9]", "", noisydata$noisystring2)
noisydata$noisydata_letters <- gsub("[0-9]", "", noisydata$noisystring2)
noisydata
## # A tibble: 10 x 4
## noisystring noisystring2 noisydata_numbers noisydata_letters
## <chr> <chr> <chr> <chr>
## 1 rei1996lpe c_ed1992flx 1992 c_edflx
## 2 zxgf2000ijhy yanf1998bls 1998 yanfbls
## 3 knglb2008isxqp auhk2001dnrz 2001 auhkdnrz
## 4 fk1995pbr rfywo2007yeiab 2007 rfywoyeiab
## 5 tgh1998pmpd ovggg2001_hxc 2001 ovggg_hxc
## 6 e2014tebyd zeb2008wurg 2008 zebwurg
## 7 ku1998ifxa xgrh2015fa 2015 xgrhfa
## 8 nboc2004qtngg xzdu1991mamu 1991 xzdumamu
## 9 vzrc2013hpc _ti2013xlb 2013 _tixlb
## 10 kam2007lb tbsz2000_d 2000 tbsz_d
Faktoreilla kuvataan kategorisia/järjestysasteikollisia muuttujia, jonka arvoilla on tietty järjestys. Faktoreita voi muodostaa joko funktioilla factor()
tai readr::parse_factor()
.
library(forcats)
x1 <- c("Joulu", "Huhti", "Tammi", "Maalis")
kk_levelit <- c(
"Tammi", "Helmi", "Maalis", "Huhti", "Touko", "Kesä",
"Heinä", "Elo", "Syys", "Loka", "Marras", "Joulu"
)
factor(x1, kk_levelit)
## [1] Joulu Huhti Tammi Maalis
## 12 Levels: Tammi Helmi Maalis Huhti Touko Kesä Heinä Elo Syys ... Joulu
readr::parse_factor(x1, kk_levelit)
## [1] Joulu Huhti Tammi Maalis
## 12 Levels: Tammi Helmi Maalis Huhti Touko Kesä Heinä Elo Syys ... Joulu
Faktorit ja starwars-data
library(tidyverse)
sw <- dplyr::starwars
# kirjainvektori
ggplot(sw, aes(x=name,y=height)) +
geom_point() +
theme(axis.text = element_text(angle=90))
# faktori
sw$name <- as.factor(sw$name) #
ggplot(sw, aes(x=name,y=height)) +
geom_point() +
theme(axis.text = element_text(angle=90))
# reorder
sw$name <- fct_reorder(f = sw$name, x = sw$height) #
ggplot(sw, aes(x=name,y=height)) +
geom_point() +
theme(axis.text = element_text(angle=90))
# relevel
f <- factor(c("a", "b", "c"))
fct_relevel(f)
fct_relevel(f, "c")
fct_relevel(f, "b", "a")
# reverse
fct_rev(f)
Rivien pinoaminen dplyr::bind_rows()
library(tidyverse)
library(rqog)
oecd <- read_qog(which.data = "oecd", data.type = "time-series")
# Valitaa pari muutama muuttuja
oecd_subset <- oecd %>% select(cname,year,contains("imf_"))
dim(oecd_subset)
## [1] 2520 20
# suomidata
d_fi <- oecd_subset %>% filter(cname == "Finland")
d_fi
## cname year imf_ab imf_abd imf_exp imf_expg imf_gd imf_gdp imf_gdpgr
## 1 Finland 1946 NA NA NA NA NA NA NA
## 2 Finland 1947 NA NA NA NA NA NA NA
## 3 Finland 1948 NA NA NA NA NA NA NA
## 4 Finland 1949 NA NA NA NA NA NA NA
## 5 Finland 1950 NA NA NA NA NA NA NA
## 6 Finland 1951 NA NA NA NA NA NA NA
## 7 Finland 1952 NA NA NA NA NA NA NA
## 8 Finland 1953 NA NA NA NA NA NA NA
## 9 Finland 1954 NA NA NA NA NA NA NA
## 10 Finland 1955 NA NA NA NA NA NA NA
## 11 Finland 1956 NA NA NA NA NA NA NA
## 12 Finland 1957 NA NA NA NA NA NA NA
## 13 Finland 1958 NA NA NA NA NA NA NA
## 14 Finland 1959 NA NA NA NA NA NA NA
## 15 Finland 1960 NA NA NA NA NA NA NA
## 16 Finland 1961 NA NA NA NA NA NA NA
## 17 Finland 1962 NA NA NA NA NA NA NA
## 18 Finland 1963 NA NA NA NA NA NA NA
## 19 Finland 1964 NA NA NA NA NA NA NA
## 20 Finland 1965 NA NA NA NA NA NA NA
## 21 Finland 1966 NA NA NA NA NA NA NA
## 22 Finland 1967 NA NA NA NA NA NA NA
## 23 Finland 1968 NA NA NA NA NA NA NA
## 24 Finland 1969 NA NA NA NA NA NA NA
## 25 Finland 1970 NA NA NA NA NA NA NA
## 26 Finland 1971 NA NA NA NA NA NA NA
## 27 Finland 1972 NA NA NA NA NA NA NA
## 28 Finland 1973 NA NA NA NA NA NA NA
## 29 Finland 1974 NA NA NA NA NA NA NA
## 30 Finland 1975 NA NA NA NA NA NA NA
## 31 Finland 1976 NA NA NA NA NA NA NA
## 32 Finland 1977 NA NA NA NA NA NA NA
## 33 Finland 1978 NA NA NA NA NA NA NA
## 34 Finland 1979 NA NA NA NA NA NA NA
## 35 Finland 1980 -2.611 -1.403 43.864 NA 10.893 53.731 5.673
## 36 Finland 1981 -0.909 -0.478 44.542 -5.208 11.544 52.625 1.294
## 37 Finland 1982 -1.738 -0.923 46.429 0.963 13.851 53.123 3.087
## 38 Finland 1983 -2.202 -1.124 48.197 3.164 15.379 51.065 3.122
## 39 Finland 1984 -0.039 -0.021 47.519 -1.548 15.180 53.028 3.213
## 40 Finland 1985 -1.434 -0.806 49.399 6.720 15.837 56.234 3.537
## 41 Finland 1986 -0.941 -0.693 50.038 5.291 16.443 73.660 2.726
## 42 Finland 1987 -1.887 -1.731 50.976 7.790 17.649 91.782 3.559
## 43 Finland 1988 -2.476 -2.694 49.546 10.870 16.535 108.806 5.211
## 44 Finland 1989 -4.862 -5.797 46.801 8.364 14.269 119.237 5.087
## 45 Finland 1990 -4.929 -6.990 47.060 -2.300 13.848 141.806 0.679
## 46 Finland 1991 -5.249 -6.734 55.731 -6.903 21.878 128.279 -5.916
## 47 Finland 1992 -4.520 -5.112 60.765 9.459 39.255 113.104 -3.325
## 48 Finland 1993 -1.261 -1.126 63.558 16.689 54.108 89.323 -0.734
## 49 Finland 1994 1.059 1.099 62.124 12.873 56.118 103.761 3.940
## 50 Finland 1995 4.111 5.524 59.970 8.235 55.147 134.350 4.206
## imf_gdpppps imf_gns imf_imp imf_impg imf_infl imf_inflch imf_inv
## 1 NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA
## 5 NA NA NA NA NA NA NA
## 6 NA NA NA NA NA NA NA
## 7 NA NA NA NA NA NA NA
## 8 NA NA NA NA NA NA NA
## 9 NA NA NA NA NA NA NA
## 10 NA NA NA NA NA NA NA
## 11 NA NA NA NA NA NA NA
## 12 NA NA NA NA NA NA NA
## 13 NA NA NA NA NA NA NA
## 14 NA NA NA NA NA NA NA
## 15 NA NA NA NA NA NA NA
## 16 NA NA NA NA NA NA NA
## 17 NA NA NA NA NA NA NA
## 18 NA NA NA NA NA NA NA
## 19 NA NA NA NA NA NA NA
## 20 NA NA NA NA NA NA NA
## 21 NA NA NA NA NA NA NA
## 22 NA NA NA NA NA NA NA
## 23 NA NA NA NA NA NA NA
## 24 NA NA NA NA NA NA NA
## 25 NA NA NA NA NA NA NA
## 26 NA NA NA NA NA NA NA
## 27 NA NA NA NA NA NA NA
## 28 NA NA NA NA NA NA NA
## 29 NA NA NA NA NA NA NA
## 30 NA NA NA NA NA NA NA
## 31 NA NA NA NA NA NA NA
## 32 NA NA NA NA NA NA NA
## 33 NA NA NA NA NA NA NA
## 34 NA NA NA NA NA NA NA
## 35 0.342 28.532 8.552 NA 32.979 11.602 31.224
## 36 0.341 27.584 -4.588 7.817 36.936 12.000 28.377
## 37 0.350 26.973 2.210 -0.319 40.371 9.300 28.654
## 38 0.352 26.315 4.113 3.238 43.763 8.400 28.372
## 39 0.348 27.281 0.918 7.006 46.826 7.000 27.208
## 40 0.347 25.610 6.362 1.586 49.551 5.820 26.926
## 41 0.345 25.118 3.492 3.202 50.988 2.900 26.036
## 42 0.344 24.916 8.790 1.594 53.070 4.082 26.788
## 43 0.346 26.614 10.630 3.452 55.795 5.135 29.090
## 44 0.351 27.135 9.012 1.242 59.462 6.572 31.983
## 45 0.339 25.190 -0.341 1.700 62.409 4.957 30.119
## 46 0.311 18.823 -13.319 -16.908 65.246 4.545 24.073
## 47 0.270 16.532 0.700 0.579 67.369 3.254 21.052
## 48 0.263 17.312 1.357 -1.091 69.610 3.326 18.573
## 49 0.266 20.812 12.813 17.798 70.733 1.614 19.754
## 50 0.267 24.393 8.188 6.837 71.015 0.398 20.282
## imf_nlb imf_pop imf_rev imf_ue
## 1 NA NA NA NA
## 2 NA NA NA NA
## 3 NA NA NA NA
## 4 NA NA NA NA
## 5 NA NA NA NA
## 6 NA NA NA NA
## 7 NA NA NA NA
## 8 NA NA NA NA
## 9 NA NA NA NA
## 10 NA NA NA NA
## 11 NA NA NA NA
## 12 NA NA NA NA
## 13 NA NA NA NA
## 14 NA NA NA NA
## 15 NA NA NA NA
## 16 NA NA NA NA
## 17 NA NA NA NA
## 18 NA NA NA NA
## 19 NA NA NA NA
## 20 NA NA NA NA
## 21 NA NA NA NA
## 22 NA NA NA NA
## 23 NA NA NA NA
## 24 NA NA NA NA
## 25 NA NA NA NA
## 26 NA NA NA NA
## 27 NA NA NA NA
## 28 NA NA NA NA
## 29 NA NA NA NA
## 30 NA NA NA NA
## 31 NA NA NA NA
## 32 NA NA NA NA
## 33 NA NA NA NA
## 34 NA NA NA NA
## 35 2.880 4.771 46.745 5.288
## 36 4.779 4.788 49.321 5.743
## 37 2.401 4.812 48.830 6.076
## 38 0.359 4.842 48.555 6.147
## 39 2.668 4.870 50.186 5.928
## 40 2.553 4.894 51.952 6.049
## 41 3.345 4.911 53.383 6.665
## 42 0.719 4.926 51.694 4.900
## 43 4.872 4.939 54.418 4.208
## 44 7.138 4.954 53.939 3.108
## 45 6.630 4.974 53.690 3.167
## 46 0.301 4.998 56.031 6.608
## 47 -4.877 5.029 55.888 11.708
## 48 -8.079 5.055 55.478 16.342
## 49 -6.398 5.078 55.725 16.583
## 50 -5.970 5.099 54.000 15.400
## [ reached getOption("max.print") -- omitted 22 rows ]
# ruotsidata
d_se <- oecd %>% filter(cname == "Sweden")
d_se
## ccode cname year ccodealp cname_year ccodealp_year ccodecow ccodewb
## version aid_cpnc aid_cpsc aid_crnc aid_crnio aid_crsc
## aid_crsio al_ethnic al_language al_religion arda_angenpct
## arda_bagenpct arda_bugenpct arda_bumahpct arda_buothpct arda_buthrpct
## arda_changpct arda_chcatpct arda_chgenpct arda_chortpct arda_chothpct
## arda_chprtpct arda_cogenpct arda_higenpct arda_isahmpct arda_isalapct
## arda_isgenpct arda_isibdpct arda_islotpct arda_isnatpct arda_isshipct
## arda_issunpct arda_jagenpct arda_jdcnpct arda_jdgenpct arda_jdorpct
## arda_jdotpct arda_jdrfpct arda_norelpct arda_otgenpct arda_shgenpct
## arda_sigenpct arda_sygenpct arda_tagenpct arda_zogenpct bci_bci
## bci_bcistd bicc_gmi bicc_hw bicc_milexp bicc_milper biu_girel
## biu_offrel biu_offres bl_asy15f bl_asy15m bl_asy15mf bl_asy25f
## bl_asy25m bl_asy25mf bl_asyp15f bl_asyp15m bl_asyp15mf bl_asyp25f
## bl_asyp25m bl_asyp25mf bl_asys15f bl_asys15m bl_asys15mf bl_asys25f
## bl_asys25m bl_asys25mf bl_asyt15f bl_asyt15m bl_asyt15mf bl_asyt25f
## bl_asyt25m bl_asyt25mf bl_lh_15f bl_lh_15m bl_lh_15mf bl_lh_25f
## bl_lh_25m bl_lh_25mf bl_lhc_15f bl_lhc_15m bl_lhc_15mf bl_lhc_25f
## bl_lhc_25m bl_lhc_25mf bl_lp_15f bl_lp_15m bl_lp_15mf bl_lp_25f
## bl_lp_25m bl_lp_25mf bl_lpc_15f bl_lpc_15m bl_lpc_15mf bl_lpc_25f
## bl_lpc_25m bl_lpc_25mf bl_ls_15f bl_ls_15m bl_ls_15mf bl_ls_25f
## bl_ls_25m bl_ls_25mf bl_lsc_15f bl_lsc_15m bl_lsc_15mf bl_lsc_25f
## bl_lsc_25m bl_lsc_25mf bl_lu_15f bl_lu_15m bl_lu_15mf bl_lu_25f
## bl_lu_25m bl_lu_25mf bmr_dem bmr_dembr bmr_demdur bmr_demmis
## bmr_demtran bnr_dem cam_contest cam_inclusive ccp_buildsoc ccp_cc
## ccp_childwrk ccp_civil ccp_democ ccp_equal ccp_freerel ccp_hr
## ccp_infoacc ccp_initiat ccp_market ccp_marriage ccp_samesexm ccp_slave
## ccp_socialsm ccp_strike ccp_syst ccp_systyear ccp_taxes chga_demo
## chga_hinst ciri_assn ciri_disap ciri_dommov ciri_elecsd ciri_empinx_new
## ciri_empinx_old ciri_formov ciri_injud ciri_kill ciri_move_old
## ciri_physint ciri_polpris ciri_relfre_new ciri_relfre_old ciri_speech
## ciri_tort ciri_wecon ciri_wopol ciri_worker ciri_wosoc cspf_effect
## cspf_legit cspf_sfi cspv_civviol cspv_civwar cspv_ethviol cspv_ethwar
## cspv_intviol cspv_intwar diat_ati diat_iti diat_ti dpi_auton dpi_cemo
## dpi_checks dpi_cl dpi_dhondt dpi_dmmo dpi_eage dpi_eipc dpi_erlc
## dpi_exelec dpi_finter dpi_fraud dpi_gf dpi_gpage1 dpi_gpage2
## dpi_gprlc1 dpi_gprlc2 dpi_gps1 dpi_gps2 dpi_gps3 dpi_gpvs1 dpi_gpvs2
## dpi_gpvs3 dpi_gs dpi_gvs dpi_hlio dpi_housesys dpi_legelec dpi_lipc
## dpi_maj dpi_mdmh dpi_mt dpi_nogp dpi_nogps dpi_noop dpi_noops dpi_nos
## dpi_numul dpi_ogpvs dpi_opage1 dpi_opf dpi_oprlc1 dpi_plurality
## dpi_polariz dpi_pr dpi_seats dpi_slop1 dpi_slop2 dpi_slop3 dpi_state
## dpi_system dpi_tf dpi_ulprty dpi_vslop1 dpi_vslop2 dpi_vslop3
## dpi_vsoop dpi_vsul dpi_yct dpi_yio dr_eg dr_ig dr_pg dr_sg
## ef_bul ef_carb ef_crop ef_ef ef_fg ef_for ef_gl
## eu_sctrtotpmin eu_scttotn fe_cultdiv fe_etfra fe_plural ffp_dp ffp_eco
## ffp_ext ffp_fe ffp_fsi ffp_gg ffp_hf ffp_hr ffp_ps ffp_ref ffp_sec
## ffp_sl ffp_ued fh_aor fh_cl fh_ep fh_feb fh_fog fh_ipolity2 fh_pair
## fh_polity2 fh_ppp fh_pr fh_rol fh_status fhp_mcei5 fhp_mclr5 fhp_mcpp5
## fhp_score5 fhp_status5 fi_ftradeint fi_ftradeint_pd fi_index
## fi_index_pd fi_legprop fi_legprop_pd fi_reg fi_reg_pd fi_sm
## fi_sm_pd fi_sog fi_sog_pd gd_ptsa gd_ptss gea_ea1524f gea_ea1524m
## gea_ea2534f gea_ea2534m gea_ea3544f gea_ea3544m gea_ea4554f gea_ea4554m
## gea_ea5564f gea_ea5564m gea_ea65f gea_ea65m gle_cgdpc gle_exp
## gle_gdp gle_imp gle_pop gle_rgdpc gle_trade gol_adm gol_dist
## gol_enep gol_enep1 gol_enepo gol_enpp gol_enpp1 gol_enppo gol_est
## gol_est_spec gol_inst gol_mt gol_nos gol_pr gol_preel gol_upseat
## gol_uptier gsd_cg gsd_fr gsd_ia gsd_rg gtm_parl gtm_pr
## gtm_unit h_alignl1 h_f h_j h_l1 h_l2 h_lflo h_polcon3 h_polcon5
## hf_business hf_efiscore hf_financ hf_govint hf_govt hf_invest hf_labor
## hf_monetary hf_prights hf_taxbur hf_trade ht_colonial ht_partsz
## ht_region ht_regtype ht_regtype1 iaep_ae iaep_arr iaep_basp iaep_bp
## iaep_callo iaep_cc iaep_const iaep_constin iaep_constlam iaep_ebbp
## iaep_eccdt iaep_ecdl iaep_eml iaep_enlc iaep_epmf iaep_es iaep_evp
## iaep_ise iaep_lap iaep_lcre iaep_lego iaep_lrit iaep_lvp iaep_milo
## iaep_nee iaep_nel iaep_npa iaep_nr iaep_osp iaep_pm5p iaep_pnlc
## iaep_pselc iaep_pvelc iaep_rbbp iaep_snlc iaep_ufs icrg_qog
## ictd_nontax ictd_rev ictd_soccon ictd_taxcorp ictd_taxexsc ictd_taxgs
## ictd_taxinc ictd_taxind ictd_taxindirect ictd_taxinsc ictd_taxnresexsc
## ictd_taxnresinsc ictd_taxother ictd_taxpaywf ictd_taxprop ictd_taxres
## ictd_taxtrade ihme_drbs ihme_drf ihme_drm ihme_lebs0001 ihme_lebs0104
## ihme_lebs0509 ihme_lebs1014 ihme_lebs1519 ihme_lebs2024 ihme_lebs2529
## ihme_lebs3034 ihme_lebs3539 ihme_lebs4044 ihme_lebs4549 ihme_lebs5054
## ihme_lebs5559 ihme_lebs6064 ihme_lebs6569 ihme_lebs7074 ihme_lebs7579
## ihme_lebs8084 ihme_lef0001 ihme_lef0104 ihme_lef0509 ihme_lef1014
## ihme_lef1519 ihme_lef2024 ihme_lef2529 ihme_lef3034 ihme_lef3539
## ihme_lef4044 ihme_lef4549 ihme_lef5054 ihme_lef5559 ihme_lef6064
## ihme_lef6569 ihme_lef7074 ihme_lef7579 ihme_lef8084 ihme_lem0001
## ihme_lem0104 ihme_lem0509 ihme_lem1014 ihme_lem1519 ihme_lem2024
## ihme_lem2529 ihme_lem3034 ihme_lem3539 ihme_lem4044 ihme_lem4549
## ihme_lem5054 ihme_lem5559 ihme_lem6064 ihme_lem6569 ihme_lem7074
## ihme_lem7579 ihme_lem8084 imf_ab imf_abd imf_exp imf_expg imf_gd
## imf_gdp imf_gdpgr imf_gdpppps imf_gns imf_imp imf_impg imf_infl
## imf_inflch imf_inv imf_nlb imf_pop imf_rev imf_ue ipu_l_s ipu_l_sw
## ipu_l_w jw_avgballot jw_avgpool jw_avgvote jw_bicameral jw_domr
## jw_election jw_indy jw_legsize jw_mdist jw_multiround jw_multitier
## jw_oneparty jw_persr jw_propcoded jw_propmmd jw_propn jw_propsmd
## jw_rank jw_tiervote kun_cluster kun_ecoabs kun_ecorel kun_legabs
## kun_legrel kun_polabs kun_polrel kun_wiqreco_all kun_wiqrleg_all
## kun_wiqrpol_all mad_gdppc nelda_fme nelda_mbbe nelda_mtop nelda_noe
## nelda_noea nelda_noee nelda_noel nelda_oa nelda_rpae nelda_vcdbe no_ce
## no_ef no_ufs oecd_airqty_t1 oecd_doctor_g1 oecd_doctor_g3
## oecd_evogdp_t1 oecd_evopop_t1 oecd_evova_t1a oecd_evova_t1b
## oecd_evova_t1d oecd_evova_t1e oecd_evova_t1f oecd_evova_t1g
## oecd_housinc_t1 oecd_houssave_t1 oecd_invrates_t1 oecd_migeduemp_t1c
## oecd_migeduemp_t1f oecd_migforpop_t1a oecd_natinccap_t1 oecd_nurse_g1
## oecd_nurse_g3 oecd_prodincom_g1 oecd_prodincom_g2a oecd_prodincom_g2b
## oecd_prodincom_g2c oecd_smoke_g1 oecd_soxnox_t1a oecd_soxnox_t1b
## oecd_valaddac_t1a oecd_valaddac_t1b oecd_valaddac_t1c oecd_valaddac_t1d
## oecd_valaddac_t1e oecd_valaddac_t1f oecd_valaddac_t1g oecd_waste_t1b
## p_autoc p_democ p_durable p_flag p_fragment p_parcomp p_parreg p_polity
## p_polity2 p_xconst p_xrcomp p_xropen p_xrreg pwt_cs pwt_csppp
## pwt_gc pwt_hci pwt_me pwt_mi pwt_plcf pwt_plcs pwt_ple
## pwt_plgc pwt_plhc pwt_pli pwt_pop pwt_rgdp pwt_rt
## pwt_sgcf pwt_shhc pwt_slcgdp pwt_tfp pwt_tfpppp pwt_xr r_elf85
## ross_gas_exp ross_gas_netexp ross_gas_netexpc ross_gas_price
## ross_gas_prod ross_gas_value_2000 ross_gas_value_2014 ross_oil_exp
## ross_oil_netexp ross_oil_netexpc ross_oil_price ross_oil_prod
## ross_oil_value_2000 ross_oil_value_2014 rsf_pfi shec_se ti_cpi
## ti_cpi_max ti_cpi_min uds_mean uds_median uds_pct025 uds_pct975
## uds_sd undp_hdi une_girg1pf une_girg1pm une_girg1pt une_oeals
## une_oeapsnt une_oeaus une_tdurls une_tdurpsnt une_tdurused unna_ahff
## unna_cii unna_con unna_er unna_fce unna_gcf unna_gdp
## unna_gdppc unna_gfcf unna_ggfce unna_gse unna_gsi unna_hce unna_man
## unna_mmu unna_oa unna_pop unna_tsc unna_wrrh vdem_corr vdem_delibdem
## vdem_dl_delib vdem_edcomp_thick vdem_egal vdem_egaldem vdem_elvotbuy
## vdem_exbribe vdem_excrptps vdem_execorr vdem_exembez vdem_exthftps
## vdem_gcrrpt vdem_gender vdem_jucorrdc vdem_libdem vdem_liberal
## vdem_mecorrpt vdem_partip vdem_partipdem vdem_polyarchy vdem_pubcorr
## vi_ext vi_mws vi_nmw vi_rag vi_ram vi_rcbg vi_rcbm vi_rsg vi_rsm
## vi_udr vi_wcoord vi_wgi vi_wl voh_gti wbgi_cce wbgi_ccn wbgi_ccs
## wbgi_gee wbgi_gen wbgi_ges wbgi_pve wbgi_pvn wbgi_pvs wbgi_rle
## wbgi_rln wbgi_rls wbgi_rqe wbgi_rqn wbgi_rqs wbgi_vae wbgi_van
## wbgi_vas wdi_accf wdi_acel wdi_acelr wdi_acelu wdi_acis wdi_acisr
## wdi_acisu wdi_aciw wdi_aciwr wdi_aciwu wdi_afp wdi_afpt wdi_agedr
## wdi_ane wdi_araland wdi_area wdi_armexp wdi_armimp wdi_birth
## wdi_birthskill wdi_broadb wdi_co2 wdi_death wdi_debt wdi_eduprp
## wdi_eduprs wdi_elerenew wdi_elprodcoal wdi_elprodgas wdi_elprodhyd
## wdi_elprodnuc wdi_elprodoil wdi_emp wdi_empagr wdi_empagrf wdi_empagrm
## wdi_empf wdi_empind wdi_empindf wdi_empindm wdi_empm wdi_empprfilo
## wdi_empprfne wdi_empprilo wdi_empprmilo wdi_empprmne wdi_empprne
## wdi_emppryfilo wdi_emppryfne wdi_emppryilo wdi_empprymilo wdi_empprymne
## wdi_emppryne wdi_empser wdi_empserf wdi_empserm wdi_eneimp wdi_enerenew
## wdi_eneuse wdi_expedu wdi_expeduge wdi_expedup wdi_expedus wdi_expedut
## wdi_exph wdi_exphpr wdi_exphpu wdi_exphpuge wdi_exphpuhe wdi_expmil
## wdi_expmilge wdi_export wdi_expstup wdi_expstus wdi_expstut
## wdi_fdiin wdi_fdiout wdi_fertility wdi_forest wdi_fossil wdi_gdpagr
## wdi_gdpcapcon2010 wdi_gdpcapcur wdi_gdpcapgr wdi_gdpcappppcon2011
## wdi_gdpcappppcur wdi_gdpgr wdi_gdpind wdi_gdppppcon2011 wdi_gdppppcur
## wdi_gdpser wdi_gerp wdi_gerpf wdi_gerpm wdi_gerpp wdi_gerppf
## wdi_gerppm wdi_gers wdi_gersf wdi_gersm wdi_gert wdi_gertf wdi_gertm
## wdi_gini wdi_gniatlcur wdi_gnicapatlcur wdi_gnicapcon2010 wdi_gnicapgr
## wdi_gnicappppcon2011 wdi_gnicappppcur wdi_gnicon2010 wdi_gnicur
## wdi_gnigr wdi_gnipppcon2011 wdi_gnipppcur wdi_homicides wdi_import
## wdi_incsh10h wdi_incsh10l wdi_incsh202 wdi_incsh203 wdi_incsh204
## wdi_incsh20h wdi_incsh20l wdi_inflation wdi_interexp wdi_internet
## wdi_interrev wdi_intrate wdi_lfpedua wdi_lfpeduaf wdi_lfpeduam
## wdi_lfpedub wdi_lfpedubf wdi_lfpedubm wdi_lfpedui wdi_lfpeduif
## wdi_lfpeduim wdi_lfpf wdi_lfpfilo15 wdi_lfpfne15 wdi_lfpilo15
## wdi_lfpmilo15 wdi_lfpmne15 wdi_lfpne15 wdi_lfpyfilo wdi_lfpyfne
## wdi_lfpyilo wdi_lfpymilo wdi_lfpymne wdi_lfpyne wdi_lifexp wdi_lifexpf
## wdi_lifexpm wdi_lrmd wdi_migration wdi_mobile wdi_mortf wdi_mortinf
## wdi_mortm wdi_mortnn wdi_mortu5 wdi_nerp wdi_nerpf wdi_nerpm wdi_nerpr
## wdi_nerprf wdi_nerprm wdi_oilrent wdi_pop wdi_pop14 wdi_pop1564
## wdi_pop65 wdi_popden wdi_popf wdi_popgr wdi_poprul wdi_poprulgr
## wdi_popurb wdi_popurbagr wdi_povgap190 wdi_povgap320 wdi_powcon
## wdi_precip wdi_refasy wdi_refori wdi_semp wdi_sempf wdi_sempm
## wdi_taxrev wdi_tele wdi_trade wdi_tradeserv wdi_unempedua
## wdi_unempeduaf wdi_unempeduam wdi_unempedub wdi_unempedubf
## wdi_unempedubm wdi_unempedui wdi_unempeduif wdi_unempeduim
## wdi_unempfilo wdi_unempfne wdi_unempilo wdi_unempmilo wdi_unempmne
## wdi_unempne wdi_unempyfilo wdi_unempyfne wdi_unempyilo wdi_unempymilo
## wdi_unempymne wdi_unempyne wdi_wip wef_aas wef_amp wef_audit wef_bccv
## wef_bct wef_bgr wef_bihiv wef_bit wef_chiv wef_ci wef_ct
## wef_dpf wef_dtsb wef_ebf wef_elec wef_fgo wef_gbb wef_gci wef_gd
## wef_gdpp2 wef_gns wef_ias wef_ilc wef_imort wef_infl wef_ipr
## wef_ji wef_lifexp wef_md wef_mobile wef_oc wef_pr wef_ptp
## wef_ptsb wef_qair wef_qes wef_qoi wef_qpe wef_qport wef_qroad
## wef_qsri wef_rps wef_tax wef_tele wef_tgp wef_uic wef_wgs wef_wlf
## wel_citrig wel_coc wel_dr wel_edi wel_par wel_ppr wel_regtype
## wel_rli wel_rol wel_scalezone wel_sys who_alc1999 who_alc2000
## whr_hap wr_nonautocracy
## [ reached getOption("max.print") -- omitted 72 rows ]
# norjadata
d_no <- oecd %>% filter(cname == "Norway")
d_no
## ccode cname year ccodealp cname_year ccodealp_year ccodecow ccodewb
## version aid_cpnc aid_cpsc aid_crnc aid_crnio aid_crsc
## aid_crsio al_ethnic al_language al_religion arda_angenpct arda_bagenpct
## arda_bugenpct arda_bumahpct arda_buothpct arda_buthrpct arda_changpct
## arda_chcatpct arda_chgenpct arda_chortpct arda_chothpct arda_chprtpct
## arda_cogenpct arda_higenpct arda_isahmpct arda_isalapct arda_isgenpct
## arda_isibdpct arda_islotpct arda_isnatpct arda_isshipct arda_issunpct
## arda_jagenpct arda_jdcnpct arda_jdgenpct arda_jdorpct arda_jdotpct
## arda_jdrfpct arda_norelpct arda_otgenpct arda_shgenpct arda_sigenpct
## arda_sygenpct arda_tagenpct arda_zogenpct bci_bci bci_bcistd bicc_gmi
## bicc_hw bicc_milexp bicc_milper biu_girel biu_offrel biu_offres
## bl_asy15f bl_asy15m bl_asy15mf bl_asy25f bl_asy25m bl_asy25mf
## bl_asyp15f bl_asyp15m bl_asyp15mf bl_asyp25f bl_asyp25m bl_asyp25mf
## bl_asys15f bl_asys15m bl_asys15mf bl_asys25f bl_asys25m bl_asys25mf
## bl_asyt15f bl_asyt15m bl_asyt15mf bl_asyt25f bl_asyt25m bl_asyt25mf
## bl_lh_15f bl_lh_15m bl_lh_15mf bl_lh_25f bl_lh_25m bl_lh_25mf
## bl_lhc_15f bl_lhc_15m bl_lhc_15mf bl_lhc_25f bl_lhc_25m bl_lhc_25mf
## bl_lp_15f bl_lp_15m bl_lp_15mf bl_lp_25f bl_lp_25m bl_lp_25mf
## bl_lpc_15f bl_lpc_15m bl_lpc_15mf bl_lpc_25f bl_lpc_25m bl_lpc_25mf
## bl_ls_15f bl_ls_15m bl_ls_15mf bl_ls_25f bl_ls_25m bl_ls_25mf
## bl_lsc_15f bl_lsc_15m bl_lsc_15mf bl_lsc_25f bl_lsc_25m bl_lsc_25mf
## bl_lu_15f bl_lu_15m bl_lu_15mf bl_lu_25f bl_lu_25m bl_lu_25mf
## bmr_dem bmr_dembr bmr_demdur bmr_demmis bmr_demtran bnr_dem cam_contest
## cam_inclusive ccp_buildsoc ccp_cc ccp_childwrk ccp_civil ccp_democ
## ccp_equal ccp_freerel ccp_hr ccp_infoacc ccp_initiat ccp_market
## ccp_marriage ccp_samesexm ccp_slave ccp_socialsm ccp_strike ccp_syst
## ccp_systyear ccp_taxes chga_demo chga_hinst ciri_assn ciri_disap
## ciri_dommov ciri_elecsd ciri_empinx_new ciri_empinx_old ciri_formov
## ciri_injud ciri_kill ciri_move_old ciri_physint ciri_polpris
## ciri_relfre_new ciri_relfre_old ciri_speech ciri_tort ciri_wecon
## ciri_wopol ciri_worker ciri_wosoc cspf_effect cspf_legit cspf_sfi
## cspv_civviol cspv_civwar cspv_ethviol cspv_ethwar cspv_intviol
## cspv_intwar diat_ati diat_iti diat_ti dpi_auton dpi_cemo dpi_checks
## dpi_cl dpi_dhondt dpi_dmmo dpi_eage dpi_eipc dpi_erlc dpi_exelec
## dpi_finter dpi_fraud dpi_gf dpi_gpage1 dpi_gpage2 dpi_gprlc1
## dpi_gprlc2 dpi_gps1 dpi_gps2 dpi_gps3 dpi_gpvs1 dpi_gpvs2 dpi_gpvs3
## dpi_gs dpi_gvs dpi_hlio dpi_housesys dpi_legelec dpi_lipc dpi_maj
## dpi_mdmh dpi_mt dpi_nogp dpi_nogps dpi_noop dpi_noops dpi_nos dpi_numul
## dpi_ogpvs dpi_opage1 dpi_opf dpi_oprlc1 dpi_plurality dpi_polariz
## dpi_pr dpi_seats dpi_slop1 dpi_slop2 dpi_slop3 dpi_state dpi_system
## dpi_tf dpi_ulprty dpi_vslop1 dpi_vslop2 dpi_vslop3 dpi_vsoop
## dpi_vsul dpi_yct dpi_yio dr_eg dr_ig dr_pg dr_sg ef_bul
## ef_carb ef_crop ef_ef ef_fg ef_for ef_gl
## eu_sctrtotpmin eu_scttotn fe_cultdiv fe_etfra fe_plural ffp_dp
## ffp_eco ffp_ext ffp_fe ffp_fsi ffp_gg ffp_hf ffp_hr ffp_ps ffp_ref
## ffp_sec ffp_sl ffp_ued fh_aor fh_cl fh_ep fh_feb fh_fog fh_ipolity2
## fh_pair fh_polity2 fh_ppp fh_pr fh_rol fh_status fhp_mcei5 fhp_mclr5
## fhp_mcpp5 fhp_score5 fhp_status5 fi_ftradeint fi_ftradeint_pd fi_index
## fi_index_pd fi_legprop fi_legprop_pd fi_reg fi_reg_pd fi_sm
## fi_sm_pd fi_sog fi_sog_pd gd_ptsa gd_ptss gea_ea1524f gea_ea1524m
## gea_ea2534f gea_ea2534m gea_ea3544f gea_ea3544m gea_ea4554f gea_ea4554m
## gea_ea5564f gea_ea5564m gea_ea65f gea_ea65m gle_cgdpc gle_exp
## gle_gdp gle_imp gle_pop gle_rgdpc gle_trade gol_adm gol_dist
## gol_enep gol_enep1 gol_enepo gol_enpp gol_enpp1 gol_enppo gol_est
## gol_est_spec gol_inst gol_mt gol_nos gol_pr gol_preel gol_upseat
## gol_uptier gsd_cg gsd_fr gsd_ia gsd_rg gtm_parl gtm_pr
## gtm_unit h_alignl1 h_f h_j h_l1 h_l2 h_lflo h_polcon3 h_polcon5
## hf_business hf_efiscore hf_financ hf_govint hf_govt hf_invest hf_labor
## hf_monetary hf_prights hf_taxbur hf_trade ht_colonial ht_partsz
## ht_region ht_regtype ht_regtype1 iaep_ae iaep_arr iaep_basp iaep_bp
## iaep_callo iaep_cc iaep_const iaep_constin iaep_constlam iaep_ebbp
## iaep_eccdt iaep_ecdl iaep_eml iaep_enlc iaep_epmf iaep_es iaep_evp
## iaep_ise iaep_lap iaep_lcre iaep_lego iaep_lrit iaep_lvp iaep_milo
## iaep_nee iaep_nel iaep_npa iaep_nr iaep_osp iaep_pm5p iaep_pnlc
## iaep_pselc iaep_pvelc iaep_rbbp iaep_snlc iaep_ufs icrg_qog
## ictd_nontax ictd_rev ictd_soccon ictd_taxcorp ictd_taxexsc ictd_taxgs
## ictd_taxinc ictd_taxind ictd_taxindirect ictd_taxinsc ictd_taxnresexsc
## ictd_taxnresinsc ictd_taxother ictd_taxpaywf ictd_taxprop ictd_taxres
## ictd_taxtrade ihme_drbs ihme_drf ihme_drm ihme_lebs0001 ihme_lebs0104
## ihme_lebs0509 ihme_lebs1014 ihme_lebs1519 ihme_lebs2024 ihme_lebs2529
## ihme_lebs3034 ihme_lebs3539 ihme_lebs4044 ihme_lebs4549 ihme_lebs5054
## ihme_lebs5559 ihme_lebs6064 ihme_lebs6569 ihme_lebs7074 ihme_lebs7579
## ihme_lebs8084 ihme_lef0001 ihme_lef0104 ihme_lef0509 ihme_lef1014
## ihme_lef1519 ihme_lef2024 ihme_lef2529 ihme_lef3034 ihme_lef3539
## ihme_lef4044 ihme_lef4549 ihme_lef5054 ihme_lef5559 ihme_lef6064
## ihme_lef6569 ihme_lef7074 ihme_lef7579 ihme_lef8084 ihme_lem0001
## ihme_lem0104 ihme_lem0509 ihme_lem1014 ihme_lem1519 ihme_lem2024
## ihme_lem2529 ihme_lem3034 ihme_lem3539 ihme_lem4044 ihme_lem4549
## ihme_lem5054 ihme_lem5559 ihme_lem6064 ihme_lem6569 ihme_lem7074
## ihme_lem7579 ihme_lem8084 imf_ab imf_abd imf_exp imf_expg imf_gd
## imf_gdp imf_gdpgr imf_gdpppps imf_gns imf_imp imf_impg imf_infl
## imf_inflch imf_inv imf_nlb imf_pop imf_rev imf_ue ipu_l_s ipu_l_sw
## ipu_l_w jw_avgballot jw_avgpool jw_avgvote jw_bicameral jw_domr
## jw_election jw_indy jw_legsize jw_mdist jw_multiround jw_multitier
## jw_oneparty jw_persr jw_propcoded jw_propmmd jw_propn jw_propsmd
## jw_rank jw_tiervote kun_cluster kun_ecoabs kun_ecorel kun_legabs
## kun_legrel kun_polabs kun_polrel kun_wiqreco_all kun_wiqrleg_all
## kun_wiqrpol_all mad_gdppc nelda_fme nelda_mbbe nelda_mtop nelda_noe
## nelda_noea nelda_noee nelda_noel nelda_oa nelda_rpae nelda_vcdbe no_ce
## no_ef no_ufs oecd_airqty_t1 oecd_doctor_g1 oecd_doctor_g3
## oecd_evogdp_t1 oecd_evopop_t1 oecd_evova_t1a oecd_evova_t1b
## oecd_evova_t1d oecd_evova_t1e oecd_evova_t1f oecd_evova_t1g
## oecd_housinc_t1 oecd_houssave_t1 oecd_invrates_t1 oecd_migeduemp_t1c
## oecd_migeduemp_t1f oecd_migforpop_t1a oecd_natinccap_t1 oecd_nurse_g1
## oecd_nurse_g3 oecd_prodincom_g1 oecd_prodincom_g2a oecd_prodincom_g2b
## oecd_prodincom_g2c oecd_smoke_g1 oecd_soxnox_t1a oecd_soxnox_t1b
## oecd_valaddac_t1a oecd_valaddac_t1b oecd_valaddac_t1c oecd_valaddac_t1d
## oecd_valaddac_t1e oecd_valaddac_t1f oecd_valaddac_t1g oecd_waste_t1b
## p_autoc p_democ p_durable p_flag p_fragment p_parcomp p_parreg p_polity
## p_polity2 p_xconst p_xrcomp p_xropen p_xrreg pwt_cs pwt_csppp
## pwt_gc pwt_hci pwt_me pwt_mi pwt_plcf pwt_plcs pwt_ple
## pwt_plgc pwt_plhc pwt_pli pwt_pop pwt_rgdp pwt_rt
## pwt_sgcf pwt_shhc pwt_slcgdp pwt_tfp pwt_tfpppp pwt_xr r_elf85
## ross_gas_exp ross_gas_netexp ross_gas_netexpc ross_gas_price
## ross_gas_prod ross_gas_value_2000 ross_gas_value_2014 ross_oil_exp
## ross_oil_netexp ross_oil_netexpc ross_oil_price ross_oil_prod
## ross_oil_value_2000 ross_oil_value_2014 rsf_pfi shec_se ti_cpi
## ti_cpi_max ti_cpi_min uds_mean uds_median uds_pct025 uds_pct975
## uds_sd undp_hdi une_girg1pf une_girg1pm une_girg1pt une_oeals
## une_oeapsnt une_oeaus une_tdurls une_tdurpsnt une_tdurused unna_ahff
## unna_cii unna_con unna_er unna_fce unna_gcf unna_gdp
## unna_gdppc unna_gfcf unna_ggfce unna_gse unna_gsi unna_hce unna_man
## unna_mmu unna_oa unna_pop unna_tsc unna_wrrh vdem_corr vdem_delibdem
## vdem_dl_delib vdem_edcomp_thick vdem_egal vdem_egaldem vdem_elvotbuy
## vdem_exbribe vdem_excrptps vdem_execorr vdem_exembez vdem_exthftps
## vdem_gcrrpt vdem_gender vdem_jucorrdc vdem_libdem vdem_liberal
## vdem_mecorrpt vdem_partip vdem_partipdem vdem_polyarchy vdem_pubcorr
## vi_ext vi_mws vi_nmw vi_rag vi_ram vi_rcbg vi_rcbm vi_rsg vi_rsm
## vi_udr vi_wcoord vi_wgi vi_wl voh_gti wbgi_cce wbgi_ccn wbgi_ccs
## wbgi_gee wbgi_gen wbgi_ges wbgi_pve wbgi_pvn wbgi_pvs wbgi_rle
## wbgi_rln wbgi_rls wbgi_rqe wbgi_rqn wbgi_rqs wbgi_vae wbgi_van
## wbgi_vas wdi_accf wdi_acel wdi_acelr wdi_acelu wdi_acis wdi_acisr
## wdi_acisu wdi_aciw wdi_aciwr wdi_aciwu wdi_afp wdi_afpt wdi_agedr
## wdi_ane wdi_araland wdi_area wdi_armexp wdi_armimp wdi_birth
## wdi_birthskill wdi_broadb wdi_co2 wdi_death wdi_debt wdi_eduprp
## wdi_eduprs wdi_elerenew wdi_elprodcoal wdi_elprodgas wdi_elprodhyd
## wdi_elprodnuc wdi_elprodoil wdi_emp wdi_empagr wdi_empagrf wdi_empagrm
## wdi_empf wdi_empind wdi_empindf wdi_empindm wdi_empm wdi_empprfilo
## wdi_empprfne wdi_empprilo wdi_empprmilo wdi_empprmne wdi_empprne
## wdi_emppryfilo wdi_emppryfne wdi_emppryilo wdi_empprymilo wdi_empprymne
## wdi_emppryne wdi_empser wdi_empserf wdi_empserm wdi_eneimp wdi_enerenew
## wdi_eneuse wdi_expedu wdi_expeduge wdi_expedup wdi_expedus wdi_expedut
## wdi_exph wdi_exphpr wdi_exphpu wdi_exphpuge wdi_exphpuhe wdi_expmil
## wdi_expmilge wdi_export wdi_expstup wdi_expstus wdi_expstut wdi_fdiin
## wdi_fdiout wdi_fertility wdi_forest wdi_fossil wdi_gdpagr
## wdi_gdpcapcon2010 wdi_gdpcapcur wdi_gdpcapgr wdi_gdpcappppcon2011
## wdi_gdpcappppcur wdi_gdpgr wdi_gdpind wdi_gdppppcon2011 wdi_gdppppcur
## wdi_gdpser wdi_gerp wdi_gerpf wdi_gerpm wdi_gerpp wdi_gerppf
## wdi_gerppm wdi_gers wdi_gersf wdi_gersm wdi_gert wdi_gertf wdi_gertm
## wdi_gini wdi_gniatlcur wdi_gnicapatlcur wdi_gnicapcon2010 wdi_gnicapgr
## wdi_gnicappppcon2011 wdi_gnicappppcur wdi_gnicon2010 wdi_gnicur
## wdi_gnigr wdi_gnipppcon2011 wdi_gnipppcur wdi_homicides wdi_import
## wdi_incsh10h wdi_incsh10l wdi_incsh202 wdi_incsh203 wdi_incsh204
## wdi_incsh20h wdi_incsh20l wdi_inflation wdi_interexp wdi_internet
## wdi_interrev wdi_intrate wdi_lfpedua wdi_lfpeduaf wdi_lfpeduam
## wdi_lfpedub wdi_lfpedubf wdi_lfpedubm wdi_lfpedui wdi_lfpeduif
## wdi_lfpeduim wdi_lfpf wdi_lfpfilo15 wdi_lfpfne15 wdi_lfpilo15
## wdi_lfpmilo15 wdi_lfpmne15 wdi_lfpne15 wdi_lfpyfilo wdi_lfpyfne
## wdi_lfpyilo wdi_lfpymilo wdi_lfpymne wdi_lfpyne wdi_lifexp wdi_lifexpf
## wdi_lifexpm wdi_lrmd wdi_migration wdi_mobile wdi_mortf
## wdi_mortinf wdi_mortm wdi_mortnn wdi_mortu5 wdi_nerp wdi_nerpf
## wdi_nerpm wdi_nerpr wdi_nerprf wdi_nerprm wdi_oilrent wdi_pop
## wdi_pop14 wdi_pop1564 wdi_pop65 wdi_popden wdi_popf wdi_popgr
## wdi_poprul wdi_poprulgr wdi_popurb wdi_popurbagr wdi_povgap190
## wdi_povgap320 wdi_powcon wdi_precip wdi_refasy wdi_refori wdi_semp
## wdi_sempf wdi_sempm wdi_taxrev wdi_tele wdi_trade wdi_tradeserv
## wdi_unempedua wdi_unempeduaf wdi_unempeduam wdi_unempedub
## wdi_unempedubf wdi_unempedubm wdi_unempedui wdi_unempeduif
## wdi_unempeduim wdi_unempfilo wdi_unempfne wdi_unempilo wdi_unempmilo
## wdi_unempmne wdi_unempne wdi_unempyfilo wdi_unempyfne wdi_unempyilo
## wdi_unempymilo wdi_unempymne wdi_unempyne wdi_wip wef_aas wef_amp
## wef_audit wef_bccv wef_bct wef_bgr wef_bihiv wef_bit wef_chiv
## wef_ci wef_ct wef_dpf wef_dtsb wef_ebf wef_elec wef_fgo wef_gbb
## wef_gci wef_gd wef_gdpp2 wef_gns wef_ias wef_ilc wef_imort
## wef_infl wef_ipr wef_ji wef_lifexp wef_md wef_mobile wef_oc
## wef_pr wef_ptp wef_ptsb wef_qair wef_qes wef_qoi wef_qpe
## wef_qport wef_qroad wef_qsri wef_rps wef_tax wef_tele wef_tgp
## wef_uic wef_wgs wef_wlf wel_citrig wel_coc wel_dr wel_edi
## wel_par wel_ppr wel_regtype wel_rli wel_rol wel_scalezone wel_sys
## who_alc1999 who_alc2000 whr_hap wr_nonautocracy
## [ reached getOption("max.print") -- omitted 72 rows ]
Pinoa kolme dataa
d_skand <- bind_rows(d_fi, d_se, d_no)
Sarakkeiden liittäminen rinnakkain dplyr::bind_cols()
oecd <- read_qog(which.data = "oecd", data.type = "time-series")
# Valitaa pari muutama muuttuja
fi_wdi <- oecd %>% select(cname,year,contains("wdi_")) %>% filter(cname == "Finland")
fi_imf <- oecd %>% select(cname,year,contains("imf_")) %>% filter(cname == "Finland")
bind_cols(fi_wdi,fi_imf)
## cname year wdi_accf wdi_acel wdi_acelr wdi_acelu wdi_acis wdi_acisr
## 1 Finland 1946 NA NA NA NA NA NA
## 2 Finland 1947 NA NA NA NA NA NA
## 3 Finland 1948 NA NA NA NA NA NA
## 4 Finland 1949 NA NA NA NA NA NA
## wdi_acisu wdi_aciw wdi_aciwr wdi_aciwu wdi_afp wdi_afpt wdi_agedr
## 1 NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA
## wdi_ane wdi_araland wdi_area wdi_armexp wdi_armimp wdi_birth
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## wdi_birthskill wdi_broadb wdi_co2 wdi_death wdi_debt wdi_eduprp
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## wdi_eduprs wdi_elerenew wdi_elprodcoal wdi_elprodgas wdi_elprodhyd
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_elprodnuc wdi_elprodoil wdi_emp wdi_empagr wdi_empagrf wdi_empagrm
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## wdi_empf wdi_empind wdi_empindf wdi_empindm wdi_empm wdi_empprfilo
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## wdi_empprfne wdi_empprilo wdi_empprmilo wdi_empprmne wdi_empprne
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_emppryfilo wdi_emppryfne wdi_emppryilo wdi_empprymilo wdi_empprymne
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_emppryne wdi_empser wdi_empserf wdi_empserm wdi_eneimp wdi_enerenew
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## wdi_eneuse wdi_expedu wdi_expeduge wdi_expedup wdi_expedus wdi_expedut
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## wdi_exph wdi_exphpr wdi_exphpu wdi_exphpuge wdi_exphpuhe wdi_expmil
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## wdi_expmilge wdi_export wdi_expstup wdi_expstus wdi_expstut
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_fdiin wdi_fdiout wdi_fertility wdi_forest wdi_fossil wdi_gdpagr
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## wdi_gdpcapcon2010 wdi_gdpcapcur wdi_gdpcapgr wdi_gdpcappppcon2011
## 1 NA NA NA NA
## 2 NA NA NA NA
## 3 NA NA NA NA
## 4 NA NA NA NA
## wdi_gdpcappppcur wdi_gdpgr wdi_gdpind wdi_gdppppcon2011 wdi_gdppppcur
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_gdpser wdi_gerp wdi_gerpf wdi_gerpm wdi_gerpp wdi_gerppf
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## wdi_gerppm wdi_gers wdi_gersf wdi_gersm wdi_gert wdi_gertf wdi_gertm
## 1 NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA
## wdi_gini wdi_gniatlcur wdi_gnicapatlcur wdi_gnicapcon2010 wdi_gnicapgr
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_gnicappppcon2011 wdi_gnicappppcur wdi_gnicon2010 wdi_gnicur
## 1 NA NA NA NA
## 2 NA NA NA NA
## 3 NA NA NA NA
## 4 NA NA NA NA
## wdi_gnigr wdi_gnipppcon2011 wdi_gnipppcur wdi_homicides wdi_import
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_incsh10h wdi_incsh10l wdi_incsh202 wdi_incsh203 wdi_incsh204
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_incsh20h wdi_incsh20l wdi_inflation wdi_interexp wdi_internet
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_interrev wdi_intrate wdi_lfpedua wdi_lfpeduaf wdi_lfpeduam
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_lfpedub wdi_lfpedubf wdi_lfpedubm wdi_lfpedui wdi_lfpeduif
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_lfpeduim wdi_lfpf wdi_lfpfilo15 wdi_lfpfne15 wdi_lfpilo15
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_lfpmilo15 wdi_lfpmne15 wdi_lfpne15 wdi_lfpyfilo wdi_lfpyfne
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_lfpyilo wdi_lfpymilo wdi_lfpymne wdi_lfpyne wdi_lifexp wdi_lifexpf
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## wdi_lifexpm wdi_lrmd wdi_migration wdi_mobile wdi_mortf wdi_mortinf
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## wdi_mortm wdi_mortnn wdi_mortu5 wdi_nerp wdi_nerpf wdi_nerpm wdi_nerpr
## 1 NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA
## wdi_nerprf wdi_nerprm wdi_oilrent wdi_pop wdi_pop14 wdi_pop1564
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## wdi_pop65 wdi_popden wdi_popf wdi_popgr wdi_poprul wdi_poprulgr
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## wdi_popurb wdi_popurbagr wdi_povgap190 wdi_povgap320 wdi_powcon
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_precip wdi_refasy wdi_refori wdi_semp wdi_sempf wdi_sempm
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## wdi_taxrev wdi_tele wdi_trade wdi_tradeserv wdi_unempedua
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_unempeduaf wdi_unempeduam wdi_unempedub wdi_unempedubf
## 1 NA NA NA NA
## 2 NA NA NA NA
## 3 NA NA NA NA
## 4 NA NA NA NA
## wdi_unempedubm wdi_unempedui wdi_unempeduif wdi_unempeduim
## 1 NA NA NA NA
## 2 NA NA NA NA
## 3 NA NA NA NA
## 4 NA NA NA NA
## wdi_unempfilo wdi_unempfne wdi_unempilo wdi_unempmilo wdi_unempmne
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_unempne wdi_unempyfilo wdi_unempyfne wdi_unempyilo wdi_unempymilo
## 1 NA NA NA NA NA
## 2 NA NA NA NA NA
## 3 NA NA NA NA NA
## 4 NA NA NA NA NA
## wdi_unempymne wdi_unempyne wdi_wip cname1 year1 imf_ab imf_abd imf_exp
## 1 NA NA NA Finland 1946 NA NA NA
## 2 NA NA NA Finland 1947 NA NA NA
## 3 NA NA NA Finland 1948 NA NA NA
## 4 NA NA NA Finland 1949 NA NA NA
## imf_expg imf_gd imf_gdp imf_gdpgr imf_gdpppps imf_gns imf_imp imf_impg
## 1 NA NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA NA
## imf_infl imf_inflch imf_inv imf_nlb imf_pop imf_rev imf_ue
## 1 NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA
## [ reached getOption("max.print") -- omitted 68 rows ]
Datojen yhdistäminen avainmuuttujilla dplyr::join
library(dplyr)
filmit <- dplyr::starwars %>% select(name,films) %>% unnest() %>% filter(grepl("^The", films))
filmit
## # A tibble: 61 x 2
## name films
## <chr> <chr>
## 1 Luke Skywalker The Empire Strikes Back
## 2 Luke Skywalker The Force Awakens
## 3 C-3PO The Phantom Menace
## 4 C-3PO The Empire Strikes Back
## 5 R2-D2 The Phantom Menace
## 6 R2-D2 The Empire Strikes Back
## 7 R2-D2 The Force Awakens
## 8 Darth Vader The Empire Strikes Back
## 9 Leia Organa The Empire Strikes Back
## 10 Leia Organa The Force Awakens
## # ... with 51 more rows
ajoneuvot <- dplyr::starwars %>% select(name,vehicles) %>% unnest()
ajoneuvot
## # A tibble: 13 x 2
## name vehicles
## <chr> <chr>
## 1 Luke Skywalker Snowspeeder
## 2 Luke Skywalker Imperial Speeder Bike
## 3 Leia Organa Imperial Speeder Bike
## 4 Obi-Wan Kenobi Tribubble bongo
## 5 Anakin Skywalker Zephyr-G swoop bike
## 6 Anakin Skywalker XJ-6 airspeeder
## 7 Chewbacca AT-ST
## 8 Wedge Antilles Snowspeeder
## 9 Qui-Gon Jinn Tribubble bongo
## 10 Darth Maul Sith speeder
## 11 Dooku Flitknot speeder
## 12 Zam Wesell Koro-2 Exodrive airspeeder
## 13 Grievous Tsmeu-6 personal wheel bike
ihmiset <- dplyr::starwars %>% select(name,height,mass,species) %>% filter(species == "Human")
ihmiset
## # A tibble: 35 x 4
## name height mass species
## <chr> <int> <dbl> <chr>
## 1 Luke Skywalker 172 77. Human
## 2 Darth Vader 202 136. Human
## 3 Leia Organa 150 49. Human
## 4 Owen Lars 178 120. Human
## 5 Beru Whitesun lars 165 75. Human
## 6 Biggs Darklighter 183 84. Human
## 7 Obi-Wan Kenobi 182 77. Human
## 8 Anakin Skywalker 188 84. Human
## 9 Wilhuff Tarkin 180 NA Human
## 10 Han Solo 180 80. Human
## # ... with 25 more rows
left_join(ihmiset, filmit, by = "name")
## # A tibble: 40 x 5
## name height mass species films
## <chr> <int> <dbl> <chr> <chr>
## 1 Luke Skywalker 172 77. Human The Empire Strikes Back
## 2 Luke Skywalker 172 77. Human The Force Awakens
## 3 Darth Vader 202 136. Human The Empire Strikes Back
## 4 Leia Organa 150 49. Human The Empire Strikes Back
## 5 Leia Organa 150 49. Human The Force Awakens
## 6 Owen Lars 178 120. Human <NA>
## 7 Beru Whitesun lars 165 75. Human <NA>
## 8 Biggs Darklighter 183 84. Human <NA>
## 9 Obi-Wan Kenobi 182 77. Human The Phantom Menace
## 10 Obi-Wan Kenobi 182 77. Human The Empire Strikes Back
## # ... with 30 more rows
right_join(ihmiset, filmit, by = "name")
## # A tibble: 61 x 5
## name height mass species films
## <chr> <int> <dbl> <chr> <chr>
## 1 Luke Skywalker 172 77. Human The Empire Strikes Back
## 2 Luke Skywalker 172 77. Human The Force Awakens
## 3 C-3PO NA NA <NA> The Phantom Menace
## 4 C-3PO NA NA <NA> The Empire Strikes Back
## 5 R2-D2 NA NA <NA> The Phantom Menace
## 6 R2-D2 NA NA <NA> The Empire Strikes Back
## 7 R2-D2 NA NA <NA> The Force Awakens
## 8 Darth Vader 202 136. Human The Empire Strikes Back
## 9 Leia Organa 150 49. Human The Empire Strikes Back
## 10 Leia Organa 150 49. Human The Force Awakens
## # ... with 51 more rows
inner_join(ihmiset, filmit, by = "name")
## # A tibble: 24 x 5
## name height mass species films
## <chr> <int> <dbl> <chr> <chr>
## 1 Luke Skywalker 172 77. Human The Empire Strikes Back
## 2 Luke Skywalker 172 77. Human The Force Awakens
## 3 Darth Vader 202 136. Human The Empire Strikes Back
## 4 Leia Organa 150 49. Human The Empire Strikes Back
## 5 Leia Organa 150 49. Human The Force Awakens
## 6 Obi-Wan Kenobi 182 77. Human The Phantom Menace
## 7 Obi-Wan Kenobi 182 77. Human The Empire Strikes Back
## 8 Anakin Skywalker 188 84. Human The Phantom Menace
## 9 Han Solo 180 80. Human The Empire Strikes Back
## 10 Han Solo 180 80. Human The Force Awakens
## # ... with 14 more rows
full_join(ihmiset, filmit, by = "name")
## # A tibble: 77 x 5
## name height mass species films
## <chr> <int> <dbl> <chr> <chr>
## 1 Luke Skywalker 172 77. Human The Empire Strikes Back
## 2 Luke Skywalker 172 77. Human The Force Awakens
## 3 Darth Vader 202 136. Human The Empire Strikes Back
## 4 Leia Organa 150 49. Human The Empire Strikes Back
## 5 Leia Organa 150 49. Human The Force Awakens
## 6 Owen Lars 178 120. Human <NA>
## 7 Beru Whitesun lars 165 75. Human <NA>
## 8 Biggs Darklighter 183 84. Human <NA>
## 9 Obi-Wan Kenobi 182 77. Human The Phantom Menace
## 10 Obi-Wan Kenobi 182 77. Human The Empire Strikes Back
## # ... with 67 more rows
semi_join(filmit, ihmiset, by = "name")
## # A tibble: 24 x 2
## name films
## <chr> <chr>
## 1 Luke Skywalker The Empire Strikes Back
## 2 Luke Skywalker The Force Awakens
## 3 Darth Vader The Empire Strikes Back
## 4 Leia Organa The Empire Strikes Back
## 5 Leia Organa The Force Awakens
## 6 Obi-Wan Kenobi The Phantom Menace
## 7 Obi-Wan Kenobi The Empire Strikes Back
## 8 Anakin Skywalker The Phantom Menace
## 9 Han Solo The Empire Strikes Back
## 10 Han Solo The Force Awakens
## # ... with 14 more rows
anti_join(filmit, ihmiset, by = "name")
## # A tibble: 37 x 2
## name films
## <chr> <chr>
## 1 C-3PO The Phantom Menace
## 2 C-3PO The Empire Strikes Back
## 3 R2-D2 The Phantom Menace
## 4 R2-D2 The Empire Strikes Back
## 5 R2-D2 The Force Awakens
## 6 Chewbacca The Empire Strikes Back
## 7 Chewbacca The Force Awakens
## 8 Jabba Desilijic Tiure The Phantom Menace
## 9 Yoda The Phantom Menace
## 10 Yoda The Empire Strikes Back
## # ... with 27 more rows
Lisäverbejä joineihin
dplyr::bind_cols(x,y)
dplyr::bind_rows
dplyr::union
dplyr::intersect
dplyr::setdif
geoms
frekvenssit
library(tidyverse)
sw <- dplyr::starwars
ggplot(sw, aes(species)) + geom_bar()
sw$species <- fct_infreq(sw$species)
ggplot(sw, aes(species)) + geom_bar()
sw$species <- as.character(sw$species)
sw2 <- sw %>% count(species)
ggplot(sw2, aes(x = species, y = n)) + geom_bar(stat = "identity")
sw2 <- sw %>% count(species)
ggplot(sw2, aes(x = reorder(species, n), y = n)) + geom_bar(stat = "identity")
sw2 <- sw %>% count(species) %>%
mutate(species = fct_reorder(species, n))
ggplot(sw2, aes(x = reorder(species, n), y = n)) + geom_bar(stat = "identity")
Lyhyenä kertauksena vielä miten voit tuoda datoja R:ään ja viedä datojen R:stä toisiin ohjelmiin. Tähän mennessä olemme tuoneet datoja haven
-paketin funktioilla, readr::read_csv()
-funktiolla sekä readxl::read_excel()
-funktiolla. Nämä paketit tarjoavat kirjoittamiseen vastaavat funktiot, jotka havenissa ovat haven::write_dta()
jne. readr-paketilla kirjoitat .csv
-datan readr::write_csv()
-funktiolla. Excel-tiedoston voit kirjoittaa funktiolla writexl::write_xlsx()
.
Yleensä varmin tapa siirtää data R:stä SAS:iin, Stata:an tai SPSS:ään on a) tallentaa data ensin .csv
-muotoon ja lukea se sitten ko. ohjelmaan ns. tekstinä. Kussakin ohjelmassa on oma tapansa tekstidatojen tuomiselle ja manuaalit/google on tässä hyvä apu.
Mikäli näiden eri pakettien muistaminen tuntuu työläältä kannattaa tututustua myös pakettiin rio: A Swiss-Army Knife for Data I/O. Paketissa on käytänössä kaksi funktiota import()
ja export()
ja funktiot arvaa luettavan/kirjoitettavan tiedoston päätteestä mitä pakettia käyttää. Eli jos haluat lukea vaikkapa Statan formaattia tai .csv
-tiedoston, voit kirjoittaa vain näin:
ess <- rio::import(file = "./datasetit/ESS8e01.stata/ESS8e01.dta")
oecd <- rio::import(file = "./datasetit/qog_oecd_ts_jan18.csv")
Jos taas haluat tallentaa dplyr::starwars
-datan exceliksi ja csv:ksi, voit tehdä sen
sw <- dplyr::starwars
rio::export(x = sw, file = "./datasetit/starwars.xlsx") # excel
rio::export(x = sw, file = "./datasetit/starwars.csv") # csv
Seuraavassa käydään läpi aluksi ggplot2
-kuvien ulkoasun räätälöimistä ja lopuksi kuvien tallentamista levylle.
Tässä on yksinkertainen demo yhden kuvan räätälöimisestä. Ennen sen läpikäymistä tutustu kurssikurjoita lukuun 8 Refine your plots!
Likipitäen kaikia ggplot2
-kuvien elementtejä on mahdollista muokata. Helpoin tapa päästä alkuun on ottaa joku valmis teema ja viilata sitä omien/kollegoiden/lehden vaatimuksien mukaiseksi.
Teen seuraavassa tuttuun starwars
-dataan pari uutta muuttujaa ja ehostan kuvaa askel askeleelta.
library(tidyverse)
# luodaan data ja poistetaan Jabba
sw <- dplyr::starwars %>% filter(name != "Jabba Desilijic Tiure") %>%
# tehdään syntymävuosiluokkamuuttuja
mutate(birth_year_class = case_when(
birth_year <= 34 ~ "the old",
birth_year > 34 & birth_year <= 70 ~ "the middle aged",
birth_year > 70 ~ "the young",
TRUE ~ "not born"
),
# Tehdään muuttujasta faktori!
birth_year_class = factor(birth_year_class, levels = c("the young",
"the middle aged",
"the old",
"not born")),
# tehdään mys painoindeksi
bmi = mass / (height/100)^2) %>%
arrange(bmi) %>%
slice(1:25)
Askel 1: Peruskuva
Tehdään hajontakuvio jossa kaikki uudet muuttujat näytillä!
# peruskerrokseen annetaan data sekä x ja y muuttujat
ggplot(data = sw, aes(x = mass, y = height)) +
# pisteille määritetään lisäksi väri ja koko
geom_point(aes(color = birth_year_class, size = bmi)) +
# tekstille määritetään ainoastaan nimi
geom_text(aes(label = name))
Askel 2: Valmiit teemat
ggplot2
-paketissa on mukana 10 teemaa, jotka saat käyttöön lisäämällä theme_teemanimi()
-kerroksen kuvaan. Voit antaa suoraan kullekin teemalle argumenteiksi base_size
eli teeman fonttikoon sekä base_family
eli teeman fontin. Tässä vaiheessa lisään vain pelkän teeman. Otsikot ovat jo tuttu asia ja lisään tässä vaiheessa kuvaan myös otsikkokerroksen funktiolla labs()
# peruskerrokseen annetaan data sekä x ja y muuttujat
ggplot(data = sw, aes(x = mass, y = height)) +
# pisteille määritetään lisäksi väri ja koko
geom_point(aes(color = birth_year_class, size = bmi)) +
# tekstille määritetään ainoastaan nimi
geom_text(aes(label = name)) +
# Teema
theme_minimal() +
# Kuvan otsikot
labs(title = "Starwars otusten kehonkoostumus ja elinvuodet",
subtitle = "Esimerkkikuva ggplot2:n perusominaisuuksista",
size = "Painoindeksi",
color = "Luokiteltu ikä",
x = "Paino (kg)",
y = "Pituus (cm)",
caption = "data: dplyr::starwars")
Askel 3: Värit
Riittävän hyvän väripaletin löytäminen kulloiseenkin tarkoitukseen on usein aikaavievä ja hermoja raastava vaihe. R:ssä on saatavilla muutama sata väriä jotka listattu mm. dokumenttiin Colors in R ja joita voi kutsua suoraan värin nimellä. ggplot2
:ssa voit luoda omia väripaletteja funktioilla scale_color_manual()
ja scale_fill_manual()
. Funktiolla scale_fill_brewer(palette = "paletinnimi")/scale_color_brewer(palette = "paletinnimi")
voit lisätä valmiita ColorBrewer-paletteja Alla kuvaan on lisätty manuaalinen väri palloille.
# peruskerrokseen annetaan data sekä x ja y muuttujat
ggplot(data = sw, aes(x = mass, y = height)) +
# pisteille määritetään lisäksi väri ja koko
geom_point(aes(color = birth_year_class, size = bmi)) +
# tekstille määritetään ainoastaan nimi
geom_text(aes(label = name)) +
# Teema
theme_minimal() +
# Kuvan otsikot
labs(title = "Starwars otusten kehonkoostumus ja elinvuodet",
subtitle = "Esimerkkikuva ggplot2:n perusominaisuuksista",
size = "Painoindeksi",
color = "Luokiteltu ikä",
x = "Paino (kg)",
y = "Pituus (cm)",
caption = "data: dplyr::starwars") +
# lisätään oma väripaletti
scale_color_manual(values = c("royalblue", "springgreen", "red", "darkmagenta"))
R:ään on olemassa useita valmiita väripaletteja sisältäviä paketteja. Emil Hvitfeldtin Comprehensive list of color palettes in r lienee kattavin yhteenveto paleteista. Itse käytän usein paketteja ggsci
ja viridis
. Kokeile vaikka ggsci::scale_color_futurama()
Askel 4: Fontit
Voit käyttää koneellesi asennettuja fontteja R:ssä extrafont
-paketin avulla. Kun käytät paketettia ensimmäisen kerran, aja seuraavat komennot:
install.packages("extrafont") # asentaa paketin
library(extrafont) # lataa paketin
font_import() # tekee koneella olevista fonteista tietokannan paketin asennushakemistoon
Kun otat fontit myöhemmin käyttöön riittää kun ennen kuvan piirtoa aja komenot
library(extrafont)
loadfonts() # lataa fontit asennushakemiston tietokannasta
Saat selville saatavilla olevat fontit komennolla extrafont::fonts()
. Alla olevassa kuvassa olen antanut theme_minimal()
funktiolle argumentiksi erään koneelleni asennetun fontin nimen Ubuntu
. Fontin voi asentaa mm. google web fonts -palvelusta, mikäli sinulla on pääkäyttäjän oikeudet koneelle.
library(extrafont)
loadfonts()
# peruskerrokseen annetaan data sekä x ja y muuttujat
ggplot(data = sw, aes(x = mass, y = height)) +
# pisteille määritetään lisäksi väri ja koko
geom_point(aes(color = birth_year_class, size = bmi)) +
# tekstille määritetään ainoastaan nimi
geom_text(aes(label = name)) +
# Teema
theme_minimal(base_family = "Ubuntu") +
# Kuvan otsikot
labs(title = "Starwars otusten kehonkoostumus ja elinvuodet",
subtitle = "Esimerkkikuva ggplot2:n perusominaisuuksista",
size = "Painoindeksi",
color = "Luokiteltu ikä",
x = "Paino (kg)",
y = "Pituus (cm)",
caption = "data: dplyr::starwars") +
# lisätään oma väripaletti
scale_color_manual(values = c("royalblue", "springgreen", "red", "darkmagenta"))
Askel 5: Teemojen kustomointi
Kuvan eri komponenteja muokataan funktion theme()
avulla. Virallisen dokumentaation sivu Modify components of a theme kertoo kunkin muokattavan komponentin tyypin ja muokkausmahdollisuudet. Seuraavassa siiräämme selitteen alhaalle ja tasaamme akselin otsikot lähelle origoa.
library(extrafont)
loadfonts()
# peruskerrokseen annetaan data sekä x ja y muuttujat
ggplot(data = sw, aes(x = mass, y = height)) +
# pisteille määritetään lisäksi väri ja koko
geom_point(aes(color = birth_year_class, size = bmi)) +
# tekstille määritetään ainoastaan nimi
geom_text(aes(label = name)) +
# Teema
theme_minimal(base_family = "Ubuntu") +
# Kuvan otsikot
labs(title = "Starwars otusten kehonkoostumus ja elinvuodet",
subtitle = "Esimerkkikuva ggplot2:n perusominaisuuksista",
size = "Painoindeksi",
color = "Luokiteltu ikä",
x = "Paino (kg)",
y = "Pituus (cm)",
caption = "data: dplyr::starwars") +
# lisätään oma väripaletti
scale_color_manual(values = c("royalblue", "springgreen", "red", "darkmagenta")) +
# Teeman kustomointi
theme(legend.position = "bottom",
axis.title = element_text(hjust = 0))
Askel 6: Tekstilabeleiden kustomointi
Tässä hajontakuviossa olen lisännyt pisteille myös kunkin hahmon nimen. Teeman fontin muokkaaminen ei muuta labeleiden fontteja, vaan se on tehtävä käsin. Seuraavassa muokkaa labeleiden fonttia ja nostan kutakin labelia hieman pisteen yläpuolelle. Huomaa että teen muutokset ~koodin puoliväliin
library(extrafont)
loadfonts()
# peruskerrokseen annetaan data sekä x ja y muuttujat
ggplot(data = sw, aes(x = mass, y = height)) +
# pisteille määritetään lisäksi väri ja koko
geom_point(aes(color = birth_year_class, size = bmi)) +
# tekstille määritetään ainoastaan nimi
geom_text(aes(label = name), family = "Ubuntu", fontface = "bold", size = 3, nudge_y = 4) +
# Teema
theme_minimal(base_family = "Ubuntu") +
# Kuvan otsikot
labs(title = "Starwars otusten kehonkoostumus ja elinvuodet",
subtitle = "Esimerkkikuva ggplot2:n perusominaisuuksista",
size = "Painoindeksi",
color = "Luokiteltu ikä",
x = "Paino (kg)",
y = "Pituus (cm)",
caption = "data: dplyr::starwars") +
# lisätään oma väripaletti
scale_color_manual(values = c("royalblue", "springgreen", "red", "darkmagenta")) +
# Teeman kustomointi
theme(legend.position = "bottom",
axis.title = element_text(hjust = 0))
Askel 7: Päällekkäisen piirtämisen (overplotting) hallinta
Etenkin hajontakuvioissa, pisteet ja etenkin labelit menevät usein päällekkäin. Pisteiden päällekkäisyyttä voi ggplot2
:ssa hoitaa “hajottamalla” pisteiden sijaintia käyttämällä geom_point()
:n sijaan geom_jitter()
:ia. Tässä tapauksessa riittää pelkkä läpinäkyvyyden lisääminen alpha
argumentilla. Labeleiden päällekkäisyys hoidetaan asentamalla uusi paketti ggrepel
. Alla kuva jossa sekä geom_point()
että geom_text()
kerrokset muokattu.
library(extrafont)
loadfonts()
# peruskerrokseen annetaan data sekä x ja y muuttujat
ggplot(data = sw, aes(x = mass, y = height)) +
# pisteille määritetään lisäksi väri ja koko
geom_point(aes(color = birth_year_class, size = bmi), alpha = .6) +
# tekstille määritetään ainoastaan nimi
ggrepel::geom_text_repel(aes(label = name), family = "Ubuntu", fontface = "bold", size = 3, nudge_y = 4) +
# Teema
theme_minimal(base_family = "Ubuntu") +
# Kuvan otsikot
labs(title = "Starwars otusten kehonkoostumus ja elinvuodet",
subtitle = "Esimerkkikuva ggplot2:n perusominaisuuksista",
size = "Painoindeksi",
color = "Luokiteltu ikä",
x = "Paino (kg)",
y = "Pituus (cm)",
caption = "data: dplyr::starwars") +
# lisätään oma väripaletti
scale_color_manual(values = c("royalblue", "springgreen", "red", "darkmagenta")) +
# Teeman kustomointi
theme(legend.position = "bottom",
axis.title = element_text(hjust = 0))
Tilastografiikat tekemisessä on tärkeää tietää perusasiat eri grafiikkaformaateista. Grafiikkaformaattien kaksi päälinjaa ovat bittikarttagrafiikka ja vektorigrafiikka, joiden ominaisuudet tiivistetty ao. taulukkoon. Lue myös yo. lyhyet wikipedia-artikkelit mikäli ero ei ole aivan selvä.
Vektorigrafiikka vs. bittimappigrafiikka
bittikartta (bitmap) | vektori | |
---|---|---|
tiedostopääte | .jpg, .png, .gif | .eps, .pdf, .svg, .ai |
esimerkiksi | digikuva | googlen kartat |
koostuu | miljoonista pikseleistä | pisteistä, viivoista ja polygoneista |
tiedostokoko | suuri | pieni |
muokkausohjelmisto | Gimp (Photoshop) | Inkscape (Illustrator) |
sopii | verkoon, printtiin (korkearesoluutioisena) | printtiin, jälkikäsittelyyn, -svg-muodossa myös verkkoon |
Vektorigrafiikasta voi tehdä bittimappigrafiikkaa, mutta ei toisin päin #’ R:ssä tehtyjä kuvia voit tallentaa useisiin erilaisiin sekä vektori- että bittikarttaformaattiehin.
Staattinen vs. vuorovaikutteinen grafiikka
Bittikartta- ja vektorigrafiikka ovat ensisijaisesti ns. staattista grafiikka, jossa ei ole vuorovaikutteisia ominaisuuksia. “Tutkimusviestinnässä” perinteisen printattavan tutkimusraportin ohella yleistyy erilaiset verkkototeutukset kuten blogit tai verkkosovellukset. Kun sisältö on palvelimella ja lukeminen tapahtuu selaimella, niin kaikenlaiset verkkoteknologiat ovat käytettävissä. Verkkototeutusten kaksi päälinjaa, vuorovaikutteinen grafiikka & verkkosovellukset, on vedetty yhteen alla olevaan taulukkoon.
grafiikan tyyppi | pros | cons |
---|---|---|
interaktiiviset kuviot | teknologian kehitys nopeaa | lyhyt elinkaari päivittyvien riippuvuuksien myötä |
paljon vaihtoehtoja | hyvin sekava skene | |
tarvitsee verkkoyhteydet | ||
ei voi printata! | ||
verkkosovellukset | hyvin joustavia | hostaus ja ylläpito |
pystyy kaikkeen mihin R & linux | vaatii paljon räätälöintia |
Vuorovaikutteiset kuviot
Helpoin tapa tehdä ggplot2-kuvista vuorovaikutteisia on asentaa plotly
()-paketti.
kuvaobjekti <- ggplot(data = sw, aes(x = mass, y = height)) +
# pisteille määritetään lisäksi väri ja koko
geom_point(aes(color = birth_year_class, size = bmi)) +
# tekstille määritetään ainoastaan nimi
geom_text(aes(label = name))
plotly::ggplotly(kuvaobjekti)
Lisää tietoa erilaisista vuorovaikutteisen grafiikan paketeista löytyy sivulta htmlwidgets - Showcase.
verkkosovellukset
shiny
-paketin avulla voit tehdä vuorovaikutteisia analyysisovelluksia nettiselaimeen. Sovellukset ovat käteviä uuteen dataan tutustuttaessa, mutta shinylla voi tehdä myös monimutkaisempia sovelluksia ja niitä voi jakaa joko shinyapps.io:n tai omalle palvelimelle asennettavan shiny server:in kautta.
Tein pienen demon, jonka voit ladata itsellesi seuraavasti
# 1. päivitä kurssin paketti
devtools::install_git("https://gitlab.com/muuankarski/utur2018") # kurssin oma paketti
# 2. hae shiny komennolla
utur2018::lataa_shiny()
# 3. avaa sovellus muokattavaksi
file.edit("./app.R")
# 4. paina muokkausikkunan oikeasta yläkulmasta "Run App" -nappulaa!
Rstudiossa voit valita Plots-paneelista Export ja tallentaa kuvan Save as image dialogista kuuteen eri formaattiin:
sekä pdf-formaattiin kohdasta “Save as PDF”.
pdf-formaatti on nykyisellään parhaiten yhteensopiva vektorigrafiikan muoto. Suurin haaste on eri fonttien käyttö
ggplot2-kuvien tallentaminen eri formaatteihin
ggplot2-paketilla tehtyjä kuvia voi tallentaa Rstudio-käyttöliittymästä käsin samoin kuin kaikkia muitakin formaatteja. Tallentaminen on kuitenkin näppärämpää kirjoittaa kuvion koodin yhteyteen ´ggsave()-funktiota käyttäen. ´ggsave()
-funktio ymmärtää kuvion nimen päätteestä, mihin formaattiin kuva tallennetaan. Jos teet kuvion alla olevalla koodilla
kuvaobjekti <- ggplot(data=cars, aes(x=speed,y=dist)) + geom_point()
Voit tallentaa sen eri formaatteihin koodilla
ggsave(plot=kuvaobjekti, filename = "kuva.png")
- bittimappi pngggsave(plot=kuvaobjekti, filename = "kuva.pdf")
- vektori pdfggsave(plot=kuvaobjekti, filename = "kuva.svg")
- vektori svgLisäparametreinä ´ggsave()`-funktioon voi laittaa mm. seuraavat
filename
File name to create on disk.plot
Plot to save, defaults to last plot displayed.device
Device to use (function or any of the recognized extensions, e.g. “pdf”). By default, extracted from filename extension. ggsave currently recognises eps/ps, tex (pictex), pdf, jpeg, tiff, png, bmp, svg and wmf (windows only).path
Path to save plot to (combined with filename).scale
Multiplicative scaling factor.width
, height
Plot dimensions, defaults to size of current graphics device.units
Units for width and height when specified explicitly (in, cm, or mm)dpi
Resolution used for raster outputs.limitsize
When TRUE (the default), ggsave will not save images larger than 50x50 inches, to prevent the common error of specifying dimensions in pixels.Mikäli et ole vielä luonut kansiota kotitehtava4/kuviot
luo se komennolla dir.create(path="./kotitehtava4/kuviot", recursive=TRUE, showWarnings = FALSE)
Piirrä kuvat koodilla kuva <- ggplot(data=cars, aes(x=speed,y=dist)) + geom_point()` ja kirjoita miten se tallennetaan ko. kansioon png, svg, tiff, jpg, eps, pdf ja bmp muodoissa.
Avaan kaikki kuvat koneellasi ja tarkastele niitä!
Perinteisen tilastollisen ohjelmsiston lisäksi R:ssä on erinomaiset spatiaalisen datan käsittelyn ja analysoinnin valmiudet. Internet on pullollaan erilaisia tutoriaaleja karttojen tekemisestä R:llä, mutta kokonaisuus on liian laaja tällä kurssilla käsiteltäväksi linkitän tähän vain pari hyvää resurssia joilla pääsee alkuun:
Data-analyysiprosessin kokonaisuuden hallintaan ei ole olemassa yhtä oikeaa vaihtoehtoa. Oikea projektin jäsentämisen ja tiedonhallinnan malli riippuu aina tehtävästä ja tekijöistä. Kaksi välinettä 1) Rstudion projektit ja 2) Rmarkdown ovat kuitenkin ehdottoman hyödyllisiä. Projekteista on kurssin aikana jo puhuttu, samoin Rmarkdownista, mutta tutustu jälkimmäiseen paremmin vielä alla olevan luennon pohjalta.
Luennon ohella perehdy myös tähän artikkeliin Wilson G, Bryan J, Cranston K, Kitzes J, Nederbragt L, Teal TK (2017) Good enough practices in scientific computing. PLoS Comput Biol 13(6): e1005510.. Siinä käydään läpi hyvän data-analyysin peruskäsitteitä ja ehdotetaan myös yhtä melko hyvää tiedonhallinnan mallia.
Getting started with R Markdown from RStudio, Inc. on Vimeo.
Rmarkdownin laajennokset
2017-2018 Markus Kainu.
Tämä teos on lisensoitu Creative Commons Nimeä 4.0 Kansainvälinen -lisenssillä.