R Data Frame: creëren, toevoegen, selecteren en subsetten
⚡ Slimme samenvatting
Een R-dataframe slaat kolommen van verschillende gegevenstypen op met gelijke lengte, waardoor het de standaard rechthoekige structuur voor analyse vormt. Vierkante haken splitsen rijen en kolommen, het dollarteken ($) geeft een kolom aan en de functie `subset()` filtert op basis van een voorwaarde.

Wat is een dataframe?
A dataframe Een dataframe is een lijst van vectoren met gelijke lengte. Een matrix bevat slechts één type data, terwijl een dataframe verschillende datatypen accepteert (numeriek, tekenreeks, factor, enz.).
Die definitie plaatst het dataframe tussen twee buren die je constant in R zult tegenkomen. Matrix is rechthoekig maar enkelvoudig getypt, en een lijst Het is van meerdere typen, maar onregelmatig. Het dataframe leent één eigenschap van elk type.
| Structuur | Kolomtypen | Elementlengtes | Typisch gebruik |
|---|---|---|---|
| vector | Slechts één type | Enkele sequentie | Eén variabele |
| Matrix | Slechts één type | rechthoekig | Numerieke algebra |
| Lijst | Elke combinatie van soorten | Kan per element verschillen | Willekeurige verzamelingen |
| Data frame | Elke combinatie van soorten | Elke kolom heeft dezelfde lengte. | Tabelanalyse |
Omdat een dataframe in feite een lijst is, werken de methoden die voor lijsten worden gebruikt hier ook. Daarom verschijnt het dollarteken later in deze handleiding opnieuw.
Hoe u een dataframe maakt
We kunnen er een dataframe in maken R Door de variabelen a, b, c en d door te geven aan de functie data.frame(), kunnen we het dataframe creëren en de kolommen benoemen met names(), waarbij we simpelweg de naam van elke variabele specificeren.
data.frame(df, stringsAsFactors = TRUE)
argumenten:
- df: Het kan een matrix zijn die moet worden omgezet als een dataframe of een verzameling variabelen die moet worden samengevoegd
- stringsAsFactors: Bepaalt of tekenreeksvectoren factorkolommen worden. De standaardwaarde was TRUE in oudere versies en is FALSE sinds R 4.0.0, dus geef deze expliciet door wanneer dit gedrag van belang is.
We kunnen een dataframe in R maken voor onze eerste dataset door vier variabelen van dezelfde lengte te combineren.
# Create a, b, c, d variables a <- c(10,20,30,40) b <- c('book', 'pen', 'textbook', 'pencil_case') c <- c(TRUE,FALSE,TRUE,FALSE) d <- c(2.5, 8, 10, 7) # Join the variables to create a data frame df <- data.frame(a,b,c,d) df
Output:
## a b c d ## 1 10 book TRUE 2.5 ## 2 20 pen FALSE 8.0 ## 3 30 textbook TRUE 10.0 ## 4 40 pencil_case FALSE 7.0
Elke vector werd een kolom en de vier waarden in elke vector werden de vier rijen. Merk op dat de argumenten geen namen hadden, dus R leidde de kolomkoppen af van de variabelnamen zelf.
We kunnen zien dat de kolomkoppen dezelfde naam hebben als de variabelen. We kunnen de kolomnaam in R wijzigen met de functie namen(). Bekijk het R create dataframe-voorbeeld hieronder:
# Name the data frame names(df) <- c('ID', 'items', 'store', 'price') df
Output:
## ID items store price ## 1 10 book TRUE 2.5 ## 2 20 pen FALSE 8.0 ## 3 30 textbook TRUE 10.0 ## 4 40 pencil_case FALSE 7.0
Door een waarde toe te wijzen aan names() worden alle kopteksten in één keer vervangen, dus de vervangingsvector moet precies één item per kolom bevatten. Om in plaats daarvan een enkele kolom te hernoemen, indexeer je de names-vector, zoals in names(df)[2] <- 'product'.
# Print the structure
str(df)
Output:
## 'data.frame': 4 obs. of 4 variables: ## $ ID : num 10 20 30 40 ## $ items: Factor w/ 4 levels "book","pen","pencil_case",..: 1 2 4 3 ## $ store: logi TRUE FALSE TRUE FALSE ## $ price: num 2.5 8 10 7
Versie-opmerking. De bovenstaande uitvoer is gegenereerd met een R-versie ouder dan 4.0.0, waarin `data.frame()` standaard tekenreeksvectoren naar factoren converteerde. Daarom wordt `items` weergegeven als een factor met vier niveaus. De basisdocumentatie van R vermeldt dat deze standaardinstelling van de fabrieksversie dit deed. gewijzigd naar stringsAsFactors = FALSE voor R 4.0.0Als je dezelfde code uitvoert op een recente versie, worden de items als een kolom met gewone tekens weergegeven en print str() in plaats daarvan chr. Voeg stringsAsFactors = TRUE toe aan de data.frame()-aanroep om de afgedrukte uitvoer te reproduceren, of lees de factorhandleiding voor situaties waarin factoren daadwerkelijk gewenst zijn.
Segmentgegevensframe
Nadat het frame is opgebouwd, is de volgende stap het terugtrekken van onderdelen ervan. Slicing is de standaard R-manier om dat te doen, en het gebruikt dezelfde vierkante haken als vectoren, alleen met twee posities in plaats van één.
Het is mogelijk om waarden uit een DataFrame te selecteren (slicen). We selecteren de rijen en kolommen die we willen retourneren tussen haakjes, voorafgegaan door de naam van het dataframe.
Een dataframe is samengesteld uit rijen en kolommen, df[A, B]. A vertegenwoordigt de rijen en B de kolommen. We kunnen segmenteren door de rijen en/of kolommen op te geven.
In afbeelding 1 hieronder vertegenwoordigt het linkergedeelte de rijen, en het rechterdeel is de kolommen. Merk op dat het symbool: betekent naar. 1:3 is bijvoorbeeld bedoeld om waarden uit 1 te selecteren naar 3.
In het onderstaande diagram laten we zien hoe je toegang krijgt tot verschillende selecties in het dataframe:
- De gele pijl selecteert de rij 1 in kolom 2
- De groene pijl selecteert de rijen 1 tot 2
- De rode pijl selecteert de kolom 1
- De blauwe pijl selecteert de rijen 1 tot 3 en kolommen 3 tot 4
Merk op dat, als we het linkerdeel leeg laten, R zal selecteren alle rijen. Naar analogie: als we het rechterdeel blanco laten, zal R selecteren alle kolommen.
We kunnen de code in de console uitvoeren:
## Select row 1 in column 2
df[1,2]
Output:
## [1] book ## Levels: book pen pencil_case textbook
De regel 'Levels' verschijnt omdat 'items' een factor is in deze sessie. In R 4.0.0 en later print dezelfde aanroep de enkele tekenreeks "book" zonder de regel 'Levels'.
## Select Rows 1 to 2
df[1:2,]
Output:
## ID items store price ## 1 10 book TRUE 2.5 ## 2 20 pen FALSE 8.0
## Select Columns 1
df[,1]
Output:
## [1] 10 20 30 40
Door een enkele kolom te selecteren met df[,1] wordt de frame-wrapper verwijderd en een gewone vector geretourneerd. Voeg drop = FALSE toe, zoals in df[, 1, drop = FALSE], wanneer een dataframe met één kolom nodig is.
## Select Rows 1 to 3 and columns 3 to 4
df[1:3, 3:4]
Output:
## store price ## 1 TRUE 2.5 ## 2 FALSE 8.0 ## 3 TRUE 10.0
Het is ook mogelijk om de kolommen te selecteren op basis van hun namen. Bijvoorbeeld, de onderstaande codetracHet heeft twee kolommen: ID en winkel.
# Slice with columns name df[, c('ID', 'store')]
Output:
## ID store ## 1 10 TRUE ## 2 20 FALSE ## 3 30 TRUE ## 4 40 FALSE
Namen zijn veiliger dan posities in productiecode, omdat het invoegen of herschikken van een kolom stilzwijgend verandert waarnaar df[, 3] verwijst, terwijl df[, 'store'] naar dezelfde gegevens blijft verwijzen.
Voeg een kolom toe aan het gegevensframe
Je kunt ook een kolom toevoegen aan een DataFrame. Gebruik hiervoor het symbool $ om de nieuwe variabele een naam te geven en een kolom toe te voegen aan een DataFrame in R.
# Create a new vector quantity <- c(10, 35, 40, 5) # Add `quantity` to the `df` data frame df$quantity <- quantity df
Output:
## ID items store price quantity ## 1 10 book TRUE 2.5 10 ## 2 20 pen FALSE 8.0 35 ## 3 30 textbook TRUE 10.0 40 ## 4 40 pencil_case FALSE 7.0 5
Let op: het aantal elementen in de vector moet gelijk zijn aan het aantal elementen in het dataframe. Voer de volgende instructie uit om een kolom toe te voegen aan het dataframe in R.
quantity <- c(10, 35, 40)
# Add `quantity` to the `df` data frame
df$quantity <- quantity
Geeft fout:
Error in `lt;-.data.frame`(`*tmp*`, quantity, value = c(10, 35, 40))
replacement has 3 rows, data has 4
Het bericht noemt de vervangingsoperator voor dataframes en vermeldt beide aantallen, zodat je precies weet wat je moet aanpassen. R hergebruikt een vervanging alleen als de lengte ervan het aantal rijen gelijkmatig deelt. Daarom wordt een waarde met lengte 1, zoals df$currency <- 'EUR', geaccepteerd, terwijl een vector met lengte 3 bij vier rijen wordt geweigerd. cbind() voegt op dezelfde manier een kolom toe, en rbind() is de tegenhanger voor het toevoegen van rijen.
Selecteer een kolom van een gegevensframe
Soms moeten we een kolom van een dataframe opslaan voor later gebruik of een bewerking op een kolom uitvoeren. We kunnen het dollarteken ($) gebruiken om de kolom uit een dataframe te selecteren.
# Select the column ID
df$ID
Output:
## [1] 1 2 3 4
Lees die uitvoer zorgvuldig. ID is opgebouwd uit de vector c(10, 20, 30, 40), dus een live console print hier 10 20 30 40; de 1 2 3 4 die hierboven worden weergegeven, zijn rijposities en niet de opgeslagen waarden. De [1] aan het begin van de regel is simpelweg de index van het eerste element op die regel, geen onderdeel van de data.
Drie routes leiden naar dezelfde kolom: df$ID, df[['ID']] en df[, 'ID']. Het dollarteken zorgt voor een gedeeltelijke overeenkomst, dus df$I zou nog steeds ID vinden, wat handig is in de console maar riskant in een opgeslagen script.
Subset een gegevensframe
In de vorige sectie hebben we een volledige kolom zonder voorwaarde geselecteerd. Het is mogelijk om subgroep op basis van het feit of een bepaalde voorwaarde al dan niet waar was.
We gebruiken de functie subset().
subset(x, condition) arguments: - x: data frame used to perform the subset - condition: define the conditional statement
We willen alleen artikelen retourneren met een prijs boven de 5, dus we kunnen het volgende doen:
# Select price above 5
subset(df, subset = price > 5)
Output:
ID items store price 2 20 pen FALSE 8 3 30 textbook TRUE 10 4 40 pencil_case FALSE 7
De rijlabels 2, 3 en 4 zijn de oorspronkelijke rijnamen die zijn overgenomen uit df, waardoor je kunt zien dat de eerste rij is gefilterd. subset() accepteert ook een select-argument om tegelijkertijd kolommen te kiezen, en de equivalente vorm met haakjes is df[df$price > 5, ]. De vorm met haakjes behoudt rijen met NA-waarden waar de voorwaarde ontbreekt, terwijl subset() deze verwijdert, dus de twee zijn niet altijd uitwisselbaar.

![Syntaxis voor het selecteren van een dataframe in R: df[A, B], waarbij de rijen links van de komma en de kolommen rechts staan.](https://www.guru99.com/images/r_programming/032918_1452_RDataFrames1.png)
