Den helt centrale struktur i R, når man skal arbejde med statistik og data, er en dataframe. En dataframe kan bedst sammenlignes med et ark i et Excel-dokument, med den væsentlige forskel at en dataframe kun kan indeholde strukturerede data, og altså ikke samtidig formler, grafer osv. Det nemmeste er at se på et konkret eksempel. Det er sjældent at man sidder og taster sine tal ind i R. De indlæses stort set altid fra en fil (som godt kunne være et Excel ark, forudsat at dette kun indeholder strukturerede data). I dette kursus ligger alle data i R-filer, som indlæses som vist her (bemærk hvor nemt det er at indlæse data fra en tilfældig internet-side):

Når I en dag får behov for at indlæse data fra andre filer, så tag fat i mig. Så viser jeg jer hvordan man gør det - det er også nemt, men I behøver ikke at lære det nu.

myFrame <- dget("https://statepi.statnoter.dk/data/myDataset.robj") #indlæs data fra filen myDataset.robj, og gem data i variablen "myFrame"
head(myFrame) #Funktionen 'head' viser de første rækker fra "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
#man kan naturligvis også bare skrive "myFrame" hvorved man får vist alle 200 rækker. Men det bliver hurtigt uoverskueligt 

Bemærk værdien “NA” i tredje række. Denne angiver at man mangler en måling af P-Glucose for denne person. Dette er naturligvis uhensigtsmæssigt, men helt normalt i realistiske datasæt, og noget man skal kunne håndtere.

Bemærk desuden at søjlene i en dataframe faktisk er en vektor (en række tal eller tekststrenge som alle har samme type).

Man kan trække en enkelt søjle ud af en dataframe på flere måder.

Den første metoder benytter kolonne-navnet (“søjle” og “kolonne” anvendes helt synonymt i disse noter):

myFrame$alder #viser alle tal i kolonnen "alder"
  [1] 20 22 68 18 25 54 50 38 79 50 18 15 51 18 12 31 41 47 47 41 65 33 60 76 19 51 50 54 32 14 19
 [32] 27 52 36 20 31 24 51 37 63 56 58 27 17 27 27 23 51 39 63 35 43 19 17 18 45 37 34 14 27 59 80
 [63] 41 16 32 29 64 33 36 13 18 51 34 34 72 47 18 80 56 53 41 33 39 16 26 18 40 70 64 24 21 15 50
 [94] 78 60 58 30 28 78 59 21 40 44 37 34 18 44 32 44 51 12 56 55 16 40 80 57 64 38 33 12 15 76 37
[125] 16 53 50 15 18 62 74 57 80 43 67 31 43 55 17 13 44 51 57 37 71 16 69 64 19 56 44 12 79 19 74
[156] 18 32 80 41 33 18 50 14 15 20 72 37 58 68 18 56 13 14 30 80 51 70 12 55 76 48 17 17 36 31 30
[187] 14 21 41 25 50 29 47 24 56 35 35 80 16 51

Via kolonnenummer

En søjle kan også tilgås via nummmeret på kolonnen, som vist herunder. Logikken her er, at myFrame[2,3] henviser til tallet i række 2 kolonne 3. Hvis man udelader 2-tallet, så får man hele kolonne nr. 3.

myFrame[, 3]
  [1] 20 22 68 18 25 54 50 38 79 50 18 15 51 18 12 31 41 47 47 41 65 33 60 76 19 51 50 54 32 14 19
 [32] 27 52 36 20 31 24 51 37 63 56 58 27 17 27 27 23 51 39 63 35 43 19 17 18 45 37 34 14 27 59 80
 [63] 41 16 32 29 64 33 36 13 18 51 34 34 72 47 18 80 56 53 41 33 39 16 26 18 40 70 64 24 21 15 50
 [94] 78 60 58 30 28 78 59 21 40 44 37 34 18 44 32 44 51 12 56 55 16 40 80 57 64 38 33 12 15 76 37
[125] 16 53 50 15 18 62 74 57 80 43 67 31 43 55 17 13 44 51 57 37 71 16 69 64 19 56 44 12 79 19 74
[156] 18 32 80 41 33 18 50 14 15 20 72 37 58 68 18 56 13 14 30 80 51 70 12 55 76 48 17 17 36 31 30
[187] 14 21 41 25 50 29 47 24 56 35 35 80 16 51
myFrame[3, ] #og med denne notation kan man naturligvis også vælge at se en bestemt række fra dataframen 
     id køn alder  bmi livvidde P-glucose(faste)
3 82414   1    68 28.6    104.2               NA

De teknisk interesserede kan bemærke at en søjle altid er en vektor (dvs. alle elementer er af samme type), mens dette ikke er tilfældet med en række. Det skyldes at de forskellige søjler godt kan indeholder forskellige typer af data (tal, tekststrenge, datoer mm), hvorimod elementerne i en søjle altid skal være samme type.

Hvis man ønsker at se flere rækker (eller kolonner) kan det naturligvis også gøres - forudsat at man kan huske hvad c() betyder (bemærk rækkenummeret længst til venstre i output’et):

myFrame[c(1, 3, 5), ] 
     id køn alder  bmi livvidde P-glucose(faste)
1 76891   2    20 36.1    105.0            4.496
3 82414   1    68 28.6    104.2               NA
5 74381   2    25 23.7     82.1            4.774

Simple beregninger foretages naturligvis på samme måde som på forrige side, f.eks.

#middel-alder
mean(myFrame$alder)
[1] 40.23