Lägga till och uppdatera kolumner med referens

Datamanipulering med data.table i R

Matt Dowle, Arun Srinivasan

Instructors, DataCamp

data.frame internt

Säg att vi vill ändra rad 2 i kolumnen "y" till 10

df <- data.frame(x = 1:5, y = 6:10)
df
x  y
1  6
2  7
df$y[2] <- 10
Datamanipulering med data.table i R

data.frame internt

I R < v3.1.0 resulterade den här operationen i en djup kopia av hela data.frame

# what happens internally prior to R v3.1.0
tmp <- <deep copy of "df">
tmp$y[2] <- 10
df <- tmp
  • Vad händer om du vill göra samma operation på en data.frame på 10 GB?
Datamanipulering med data.table i R

data.frame internt

  • I v3.1.0 gjordes förbättringar så att bara den uppdaterade kolumnen kopieras djupt

  • Här kopieras bara kolumnerna a och b djupt i operationen nedan på df

df <- data.frame(a = 1:3, b = 4:6, c = 7:9, d = 10:12)
df[1:2] <- lapply(df[1:2], function(x) ifelse(x%%2, x, NA))
df
 a  b c  d
 1 NA 7 10
NA  5 8 11
 3 NA 9 12
Datamanipulering med data.table i R

data.table internt

  • data.table uppdaterar kolumner på plats, dvs. med referens

  • Det innebär att du inte behöver tilldela resultatet till en variabel

  • Ingen kopia av någon kolumn skapas när värdena ändras

  • data.table använder operatorn := för att lägga till, uppdatera och ta bort kolumner med referens

Datamanipulering med data.table i R

LHS := RHS-form

batrips[, c("is_dur_gt_1hour", "week_day") := list(duration > 3600, 
                                                   wday(start_date))]

# When adding a single column quotes aren't necessary batrips[, is_dur_gt_1hour := duration > 3600]
Datamanipulering med data.table i R

Funktionell form

batrips[, `:=`(is_dur_gt_1hour = NULL,                  
               start_station = toupper(start_station))] 
Datamanipulering med data.table i R

Nu kör vi en övning!

Datamanipulering med data.table i R

Preparing Video For Download...