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.