Gå till index

Analys och forskning med R

0% färdig
0/0 Steps
  1. Analys och forskning med R och Posit (Rstudio)
  2. Grunderna i R och Rstudio
    7 Ämnen
  3. Importera, exportera, spara och ladda data
    5 Ämnen
  4. Strängar och regular expressions (regex)
    1 Ämne
  5. Bearbetning av data med dplyr
    12 Ämnen
  6. Visualisera och presentera
    14 Ämnen
  7. Explorerande och deskriptiva analyser
    6 Ämnen
  8. Prediktionsmodeller
    12 Ämnen
  9. Klassisk regressionsanalys
    8 Ämnen
  10. Machine learning (ML) och Artificiell Intelligens (AI)
    9 Ämnen
  11. Skapa prediktionsmodeller med Tidymodels
    6 Ämnen
  12. Hypotestester och epidemiologiska mått
    5 Ämnen
Avsnitt 5, Ämne 2

Dplyr filter(): Filtrera rader (observationer)

Avsnitt Progress
0% färdig

Filtrera rader med filter()

Funktionen filter() används för att filtrera rader, för att behålla de som uppfyller ett eller flera kriterier. För att skapa kriterier kan du använda flera olika operander, vilka demonstreras nedan. Likt föregående kapitel används mpg data för att demonstrera funktionen. Aktivera tidyverse (som innehåller dplyr och mpg data).

R
library(tidyverse)

Här nedan demonstreras olika exempel på hur filter() kan användas.

Exempel: Behåll alla rader med minst 2 på variabeln displ:

R
mpg |> filter(displ >= 2)
Resultat
# A tibble: 212 × 11
   manufacturer model      displ  year   cyl trans      drv     cty   hwy fl    class  
   <chr>        <chr>      <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>  
 1 audi         a4           2    2008     4 manual(m6) f        20    31 p     compact
 2 audi         a4           2    2008     4 auto(av)   f        21    30 p     compact
 3 audi         a4           2.8  1999     6 auto(l5)   f        16    26 p     compact
 4 audi         a4           2.8  1999     6 manual(m5) f        18    26 p     compact
 5 audi         a4           3.1  2008     6 auto(av)   f        18    27 p     compact
# Avkortad utskrift

Exempel: Behåll alla rader med minst 2 på displ och där class är "compact" och där cyl är större än medelvärdet för cyl:

R
mpg |> filter(displ >= 2 & class =="compact" &  cyl > mean(cyl))
Resultat
# A tibble: 13 × 11
   manufacturer model        displ  year   cyl trans      drv     cty   hwy fl    class  
   <chr>        <chr>        <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>  
 1 audi         a4             2.8  1999     6 auto(l5)   f        16    26 p     compact
 2 audi         a4             2.8  1999     6 manual(m5) f        18    26 p     compact
 3 audi         a4             3.1  2008     6 auto(av)   f        18    27 p     compact
 4 audi         a4 quattro     2.8  1999     6 auto(l5)   4        15    25 p     compact
 5 audi         a4 quattro     2.8  1999     6 manual(m5) 4        17    25 p     compact
# Avkortad utskrift

Filter kan kombineras med group_by() för att filtrera separat inom varje grupp. Detta är mycket användbart när ett villkor behöver variera inom olika grupper. Ponera exempelvis att vi vill behålla alla rader där cyl är större än medelvärdet för cyl inom varje enskild billtillverkare (variabeln manufacturer är biltillverkare):

R
mpg |>
  group_by(manufacturer) |>
  filter(cyl > mean(cyl))
Resultat
# A tibble: 109 × 11
# Groups:   manufacturer [11]
   manufacturer model      displ  year   cyl trans      drv     cty   hwy fl    class  
   <chr>        <chr>      <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>  
 1 audi         a4           2.8  1999     6 auto(l5)   f        16    26 p     compact
 2 audi         a4           2.8  1999     6 manual(m5) f        18    26 p     compact
 3 audi         a4           3.1  2008     6 auto(av)   f        18    27 p     compact
 4 audi         a4 quattro   2.8  1999     6 auto(l5)   4        15    25 p     compact
 5 audi         a4 quattro   2.8  1999     6 manual(m5) 4        17    25 p     compact
# Avkortad utskrift

Filter med specificerad missing (NA)

Observationer som har missing på en variabel som ingår i ett filter()-kriterium kommer inte att bedömas och kan därmed inte behållas. Missing specificeras med NA (Not Available). Lått oss skapa övningsdata för att demonstrera hur missing kan specificeras i filter(). Vi skapar data med funktionen tibble(), med vilken man kan skapa dataframes:

R
# Skapa data
my_data <- tibble(Var1 = c(NA, 5, 9),
                  Var2 = c(1, NA, 3),
                  Var3 = c("Ja", "Nej", NA))

# Se data
my_data
Resultat
   Var1  Var2 Var3 
1    NA     1 Ja   
2     5    NA Nej  
3     9     3 NA   

Det finns en NA på varje rad. Låt oss nu prova filtrera med ett villkor för varje variabel:

R
my_data %>% filter(Var1>4, Var2<10, Var3=="Ja")
Resultat
# A tibble: 0 × 3

Som framgår ovan kvarstår inga rader! Detta beror på att första observationen saknar information (NA) på Var1, vilket exkluderar observationen. Andra patienten saknar information på Var2, vilket exkluderar observationen. Tredje observationen saknar information på Var3, vilket exkluderar observationen och därmed kvarstår inga observationer.

För att hantera detta problem finns funktionen is.na(). Funktionen används som följer:

  • is.na() frågar om ett värde saknas. Om värdet saknas så är villkoret uppfyllt.
  • !is.na() frågar om ett värde inte saknas, dvs om värdet existerar. Operanden ! betyder "tvärtom" eller "inte" i R. Villkoret !is.na() betyder således "saknas inte".

I nästa exempel behåller vi rader där Var1 är större än 6 eller saknas. I R används | för att specificera "eller". Koden blir som följer:

R
my_data %>% filter(Var1>6 | is.na(Var1))
Resultat
   Var1  Var2 Var3 
1    NA     1 Ja   
2     9     3 NA

Filter med ett numeriskt intervall

Ett numeriskt intervall kan specificeras med %in% som läses "inuti". Här följer två exempel som behåller alla rader där Var1 är någon av siffrorna 0, 1, 2, 3, 4, 5, 6. I första exemplet kombineras %in% med : och i andra exemplet med c().

R
# Exempel 1
my_data %>% filter(Var1 %in% 0:6)

# Exempel 2
my_data %>% filter(Var1 %in% c(0, 1, 2, 3, 4, 5, 6))
Resultat
   Var1  Var2 Var3 
1     5    NA Nej  

Filter med ett kategoriskt intervall

Ett kategoriskt intervall kan också specificeras med %in%. Här behåller vi alla rader där Var3 är ekvivalent med antingen "Ja" eller "Nej":

R
my_data %>% filter(Var3 %in% c("Ja", "Nej"))
Resultat
   Var1  Var2 Var3 
1    NA     1 Ja   
2     5    NA Nej  

Logga in för att läsa

Som medlem har du tillgång till allt nuvarande och kommande utbildningsmaterial. Du kan följa din utveckling och få intyg på avklarade moment.