5 Importera data

Wow! Du har hängt med så här långt. Nu börjar det roliga.

Men för att koden nedan, som är anpassad för Demoskop, ska vara förstålig rekommenderar jag att du gör den här 4-timmarskursen.. Som är en kort introduktion till att arbeta med data i R.

Här beskrivs hur du importerar och exporterar olika sorters format i R.

5.1 SPSS

Ett av de vanligaste formaten på Demoskop är SPSS-formatet .sav. För att importera filer från exempelvis SPSS, SAS eller Stata använder man enklast paketet haven.

Om du skapat projektet i data-mappen behöver du bara:

library(haven)

data <- read_sav("inpl0001.sav")

Om du har filen i en annan mapp behöver du hittat sökvägen till filen.Det gör du enklast med hjälp av funktionen file.choose() som startar ett fönster där du kan välja fil och sedan få sökvägen till den. Observera att du inte kan läsa filer genom att högerklicka och “Copy as path”.

data <- read_sav("P:\\_Kund\\INPL\\0001\\Data\\inpl0001.sav")

5.2 SAS

även om vi oftast får data i SPSS från exempelvis SG eller Norstat så är det bearbetade formatet på Demoskop oftast SAS. Vi kan läsa vägt data på samma sätt som vi läser sav-filer.

library(haven)
data <- read_sas("P:\\_Kund\\INPL\\0001\\Data\\inpl0001raw.sas7bdat")

Vi kan då kolla på vår data.

library(dplyr)
library(knitr)
data %>%
  head(10) %>%
  select(4:10) %>%
  kable()
kon alder ktillT ktill1 ktill2 ktill3 ktill4
NA NA NA NA NA NA
NA NA NA NA NA NA
1 47 Inga 2 2 2 2
1 52 Compricer 3 2 2 2
1 66 Inga 1 1 1 1
2 63 Compricer, prisrunner 3 3 1 4
1 63 2 3 2 3
1 67 pricerunner compricer 4 5 3 2
1 68 Ingen 1 2 1 1
1 65 4 5 3 3

5.3 Excel

Excel som dataformat är inte ovanligt. På Demoskop får vi nog framför allt urval i Excel.

För att importera data från Excel till R använder vi paketet readxl.

Med funktionen read_excel() kan vi enkelt specificera vilken range som gäller. Det är en bra funktion om det exempelvis finns en summerande rad i slutet av en datafil eller om flera celler innehåller tomrum som vi inte vill läsa.

library(readxl)
urval <- read_excel("P:\\_Kund\\UNIV\\0011\\Urval\\univ0011Chef_urv01_qid.xls",
                    range = "A1:D42")

urval %>%
  head(10) %>%
  kable()
ipnr Förvaltning Ansvar_AID Personnr
1 Tekniska förvaltningen B 1
2 Tekniska förvaltningen C 1
3 Tekniska förvaltningen B 1
4 Tekniska förvaltningen C 1
5 Socialförvaltningen C 1
6 Socialförvaltningen C 1
7 Socialförvaltningen C 1
8 Socialförvaltningen C 1
9 Socialförvaltningen C 1
10 Socialförvaltningen C 1

readxl kan även användas för att läsa in tabeller, då behöver du dock se till att kolumnerna har namn.

library(readxl)
tabell <- read_excel("P:\\_Kund\\DEMO\\1087\\Tabell\\demo1087tb01.xlsx", range = "C11:AI16")

tabell %>%
  kable()
Hur ofta svarar du på telefonsamtal från okända nummer på mobiltelefonen? Samtliga Man Kvinna 18-39 år 40-49 år 50-64 år 65- år Grundskolenivå Gymnasienivå Universitet/Högskolenivå Storstadsområden Övriga stadsområden Övriga landet Norrland Svealand utom St Stockholm Västra Götaland Östra Götaland Skåne Moderaterna Liberalerna Kristdemokraterna Centerpartiet Socialdemokraterna Miljöpartiet Vänsterpartiet Sverigedemokraterna Annat parti M,L,KD,C S,V,Mp Utvecklingen rätt håll Utvecklingen fel håll
Alltid 7.8218 9.2055 6.4474 7.0256 8.3162 7.5236 8.5777 10.5072 6.4159 7.6294 6.4239 8.3030 8.7565 9.2718 7.6479 6.9111 8.4989 7.2275 5.7179 8.4595 7.8691 5.4804 15.4860 7.0133 10.3948 11.7080 8.4924 0.0000 9.5543 8.2553 8.9794 6.8202
Oftast 28.9616 32.5065 25.6230 29.0604 28.9708 28.0919 30.6591 31.2196 27.4602 30.8070 29.7018 29.7178 28.7089 25.4641 33.1353 30.6227 30.0532 30.3180 25.8033 29.3941 37.7221 57.7197 24.6786 27.8540 20.0816 21.9275 26.0035 63.7762 31.9405 25.9278 30.6403 27.0452
Sällan 43.9490 39.7899 48.3225 45.4477 49.4896 43.9910 36.8202 37.4851 47.5287 44.1791 45.2068 42.9170 42.6635 46.3444 40.7606 45.3334 40.9647 44.5963 46.3288 44.4791 43.8616 28.2537 38.9769 46.0068 46.0562 48.1824 42.0273 23.1446 41.8651 46.4272 44.1231 43.8905
Aldrig 19.2676 18.4982 19.6071 18.4663 13.2233 20.3935 23.9430 20.7881 18.5952 17.3845 18.6674 19.0622 19.8711 18.9197 18.4562 17.1328 20.4833 17.8581 22.1499 17.6673 10.5471 8.5462 20.8585 19.1260 23.4674 18.1821 23.4768 13.0792 16.6401 19.3897 16.2571 22.2441
Vet ej/ej svar 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000

5.4 Läsa in flera sheets

Ibland kan vi få data i en rad olika worksheets i en workbook i Excel. Att få in den datan i våra tabellprogram kan vara krångligt och framför allt tråkigt om det handlar om över 10 worksheets.

När något är krångligt och tråkigt är risken att det blir fel stor.

Om varje worksheet är formaterat på samma sättet är det enkelt att läsa in och samman det i R.

Här är ett exempel på hur man gör det med data som vi fick från SCB hösten 2017.

Filen vi fick var:

fil <- "P:\\_Kund\\FORS\\0167\\Tabell\\tbscb.xlsx"

Vi kan använda excel_sheets() för att ta reda på vad alla sheets heter.

excel_sheets(fil)
##  [1] "2015" "2014" "2013" "2012" "2011" "2010" "2009" "2008" "2007" "2006"
## [11] "2005" "2004" "2003" "2002" "2001" "2000" "1999" "1998" "1997" "1996"
## [21] "1995"

Säg att vi nu skulle vilja använda funktionen read_excel() på varje sheet och dessutom slå ihop allt till samma data-set.

För att göra det använder vi den fantastiska funktion map_df(). Funktionen kommer från paketet purrr och tar en funktion, i det här fallet read_excel(), och upprepar den på flera olika objekt, i det här fallet excel-sheets.

Så här ser koden ut:

library(purrr)
data <- fil %>%
  excel_sheets() %>% 
  set_names() %>% 
  map_df(~ read_excel(path = fil, sheet = .x, range = "A4:D234"), .id = "year")

Voila! Vi har sammanslagen data.

5.4.1 Vill du veta mer?

Vill du lära dig mer om att ladda in data från excel till R? Kolla här

Vill du lära dig mer om purrr och att arbeta smidigt med data i R kan jag rekommendera den här 4-timmarskursen., den första delen är gratis.