Opdeling og filtrering af data

På denne side gennemgås teknikker til at opdele en dataframe, eller alternativt foretage en beregning på en del af en dataframe. Bemærk: Opdeling af data i forbindelse med grafer, gennemgås på siderne om grafer - det er i store træk ret nemt :-)

Indlæs først samme datasæt som på de forrige sider

Bemærk funktionen cat() som sætter tekststrenge sammen og printer resultatet.

myFrame <- dget("https://statepi.statnoter.dk/data/myDataset.robj")
head(myFrame) 
     id køn alder  bmi livvidde P-glucose(faste)
1 76891   2    20 36.1    105.0            4.496
2 79112   2    22 36.4    105.8            5.107
3 82414   1    68 28.6    104.2               NA
4 82116   2    18 46.7    128.4            5.384
5 74381   2    25 23.7     82.1            4.774
6 75714   1    54 23.9     88.8            8.660
cat("Antal rækker:", nrow(myFrame)) #vis antal rækker, og sæt en pæn tekst på
Antal rækker: 200

Delsæt

Hvis man ønsker en delmængde af det samlede datasæt, som man så kan regne videre på, gøres det med funktionen subset, f.eks. som herunder. subset skal bruge to parametre, dels den dataframe man ønsker en delmængde af, dels den betingelse man ønsker at filtrere efter. Det kan være at man kun ønsker de rækker der stammer fra mænd, eller kun de rækker der stammer fra kvinder. I myFrame svarer kvinderne til værdien 2 i kolonnen køn, dvs. for at få kvinderne kan man skrive køn==2. Bemærk, at der altid skal benyttes to lighedstegn, når man skal skrive denne slags “betingelse”.

myFrame.women <- subset(myFrame, køn == 2) #bemærk at man skal benytte 2 lighedstegn, når man sammenligner
head(myFrame.women)
      id køn alder  bmi livvidde P-glucose(faste)
1  76891   2    20 36.1    105.0            4.496
2  79112   2    22 36.4    105.8            5.107
4  82116   2    18 46.7    128.4            5.384
5  74381   2    25 23.7     82.1            4.774
9  81163   2    79 26.6     91.8            4.885
10 81173   2    50 44.9    108.2            5.829
cat("Antal kvinder i datasættet:", nrow(myFrame.women))
Antal kvinder i datasættet: 108
#eller hvis man kun vil have personer der både er kvinde OG ældre end 40 år (40 år inkl):
myFrame.older <- subset(myFrame, køn == 2 & alder >= 40)
head(myFrame.older)
      id køn alder  bmi livvidde P-glucose(faste)
9  81163   2    79 26.6     91.8            4.885
10 81173   2    50 44.9    108.2            5.829
13 74804   2    51 29.8    100.3            5.718
17 77265   2    41 41.3    109.4            5.718
18 79130   2    47 32.5       NA            6.273
19 79675   2    47 24.4     91.8            5.495
cat("Antal kvinder ældre end 40 år (inkl):", nrow(myFrame.older))
Antal kvinder ældre end 40 år (inkl): 52

Har du behov for mere komplicerede delsæt, så spørg din underviser.

Manglende tal

Hvis man ønsker et datasæt som kun indeholder de rækker hvor der ikke mangler målinger, kan man benytte funktionen complete.cases. Bemærk: complete.cases(myFrame) giver de rækkenumre som er komplette - altså indeholder valide data i alle kolonner. Derefter udtages disse rækker fra myFrame med notationen myFrame[rækkenumre,kolonnenummer]. Ved at efterlade kolonennenummer tomt udtages alle kolonner.

myFrame.complete <- myFrame[complete.cases(myFrame), ]
cat("Antal komplette rækker:", nrow(myFrame.complete))
Antal komplette rækker: 187