Cum să subsetați un cadru de date în R: 4 metode practice cu exemple

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

Manipularea datelor este o abilitate crucială în programarea R, iar subsetarea cadrelor de date este una dintre cele mai comune operațiuni pe care le veți efectua. Acest ghid cuprinzător vă va ghida prin patru metode puternice de a subseta cadre de date în R, complet cu exemple practice și cele mai bune practici.

Înainte de a aborda anumite metode, este esențial să înțelegeți ce înseamnă subsetarea. Subsetarea este procesul de extragere a anumitor porțiuni din cadrul de date pe baza anumitor condiții. Aceasta ar putea implica selectarea:

  • Rânduri specifice
  • Coloane specifice
  • O combinație a ambelor
  • Date care îndeplinesc anumite condiții

Sintaxa paranteze pătrate

Cea mai fundamentală modalitate de a subgrupa un cadru de date în R este utilizarea parantezelor drepte. Sintaxa de bază este:

df(rows, columns)

Exemple cu selecția rândurilor și coloanelor

# Create a sample data frame
df <- data.frame(
  id = 1:5,
  name = c("Alice", "Bob", "Charlie", "David", "Eve"),
  age = c(25, 30, 35, 28, 32),
  salary = c(50000, 60000, 75000, 55000, 65000)
)

# Select first three rows
first_three <- df(1:3, )
print(first_three)
  id    name age salary
1  1   Alice  25  50000
2  2     Bob  30  60000
3  3 Charlie  35  75000
# Select specific columns
names_ages <- df(, c("name", "age"))
print(names_ages)
     name age
1   Alice  25
2     Bob  30
3 Charlie  35
4   David  28
5     Eve  32
# Select rows based on condition
high_salary <- df(df$salary > 60000, )
print(high_salary)
  id    name age salary
3  3 Charlie  35  75000
5  5     Eve  32  65000

Filtrare avansată cu operatori logici

# Multiple conditions
result <- df(df$age > 30 & df$salary > 60000, )
print(result)
  id    name age salary
3  3 Charlie  35  75000
5  5     Eve  32  65000
# OR conditions
result <- df(df$name == "Alice" | df$name == "Bob", )
print(result)
  id  name age salary
1  1 Alice  25  50000
2  2   Bob  30  60000

Sintaxa de bază subset().

Funcția subset() oferă o alternativă mai lizibilă la paranteze drepte:

subset(data, subset = condition, select = columns)

Condiții complexe cu subset()

# Filter by age and select specific columns
result <- subset(df, 
                age > 30, 
                select = c(name, salary))
print(result)
     name salary
3 Charlie  75000
5     Eve  65000
# Multiple conditions
result <- subset(df, 
                age > 25 & salary < 70000,
                select = -id)  # exclude id column
print(result)
   name age salary
2   Bob  30  60000
4 David  28  55000
5   Eve  32  65000

Folosind funcția filter().

library(dplyr)

# Basic filtering
high_earners <- df %>%
  filter(salary > 60000)
print(high_earners)
  id    name age salary
1  3 Charlie  35  75000
2  5     Eve  32  65000
# Multiple conditions
experienced_high_earners <- df %>%
  filter(age > 30, salary > 60000)
print(experienced_high_earners)
  id    name age salary
1  3 Charlie  35  75000
2  5     Eve  32  65000

Folosind funcția select().

# Select specific columns
names_ages <- df %>%
  select(name, age)
print(names_ages)
     name age
1   Alice  25
2     Bob  30
3 Charlie  35
4   David  28
5     Eve  32
# Select columns by pattern
salary_related <- df %>%
  select(contains("salary"))
print(salary_related)
  salary
1  50000
2  60000
3  75000
4  55000
5  65000

Operații de combinare

final_dataset <- df %>%
  filter(age > 30) %>%
  select(name, salary) %>%
  arrange(desc(salary))
print(final_dataset)
     name salary
1 Charlie  75000
2     Eve  65000

date.table Sintaxă

library(data.table)
dt <- as.data.table(df)

# Basic subsetting
result <- dt(age > 30)
print(result)
      id    name   age salary
        
1:     3 Charlie    35  75000
2:     5     Eve    32  65000
# Complex filtering
result <- dt(age > 30 & salary > 60000, .(name, salary))
print(result)
      name salary
      
1: Charlie  75000
2:     Eve  65000
  1. Verificați întotdeauna structura rezultatului dvs. cu str()
  2. Fiți atenți la numele coloanelor care conțin spații
  3. Utilizați tipuri de date adecvate pentru condițiile de filtrare
  4. Luați în considerare performanța pentru seturi de date mari
  5. Menține lizibilitatea codului

Problemă: Creați un cadru de date cu informații despre angajați și efectuați următoarele operații:

  1. Filtrați angajații cu vârsta peste 25 de ani
  2. Selectați numai coloanele cu nume și salariu
  3. Sortați după salariu în ordine descrescătoare

Încercați să rezolvați singur acest lucru înainte de a căuta soluția de mai jos!

Faceți clic pentru a dezvălui soluția

Soluţie:

# Create sample data
employees <- data.frame(
  name = c("John", "Sarah", "Mike", "Lisa"),
  age = c(24, 28, 32, 26),
  salary = c(45000, 55000, 65000, 50000)
)

# Using dplyr
library(dplyr)
result <- employees %>%
  filter(age > 25) %>%
  select(name, salary) %>%
  arrange(desc(salary))

# Using base R
result_base <- employees(employees$age > 25, c("name", "salary"))
result_base <- result_base(order(-result_base$salary), )
  • Subsetarea bazei R este fundamentală, dar poate fi verbosă
  • Funcția subset() oferă o mai bună lizibilitate
  • dplyr oferă operații intuitive și care pot fi înlănțuite
  • data.table este optim pentru seturi mari de date
  • Alegeți metoda care se potrivește cel mai bine nevoilor și stilului dvs. de codare
  1. Î: Care metodă de subsetare este cea mai rapidă?

data.table este, în general, cel mai rapid, în special pentru seturile de date mari, urmat de baza R și dplyr.

  1. Î: Pot amesteca diferite metode de subsetare?

Da, dar este recomandat să rămâneți la un singur stil pentru consecvență și lizibilitate.

  1. Î: De ce subsetul meu returnează rezultate neașteptate?

Cauzele frecvente includ tipuri de date incorecte, valori lipsă (NA) sau probleme de prioritate a operatorilor logici.

  1. Î: Cum fac subset bazat pe mai multe coloane?

Utilizați operatori logici (&, |) pentru a combina condițiile între coloane.

  1. Î: Care este diferența dintre select() și filter()?

filter() funcționează pe rânduri în funcție de condiții, în timp ce select() alege coloanele.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.