Manipulation de données avec data.table en R
Matt Dowle, Arun Srinivasan
Instructors, DataCamp
# Même exemple que précédemment
## Forme LHS := RHS
batrips[, c("is_dur_gt_1hour", "week_day") :=
.(duration > 3600, wday(start_date)]
# Idem ci-dessus, mais en forme fonctionnelle `:=`()
batrips[, `:=`(is_dur_gt_1hour = duration > 3600,
week_day = wday(start_date))]
# Mise à jour par référence avec by
batrips[, n_zip_code := .N, by = zip_code]
# Forme fonctionnelle batrips[, `:=`(end_dur_first = duration[1], end_dur_last = duration[.N]), by = end_station]# Forme LHS := RHS batrips[, c("end_dur_first", "end_dur_last") := list(duration[1], duration[.N]), by = end_station]batrips[1:5]
trip_id duration ... end_station ... end_dur_first end_dur_last
139545 435 ... Townsend at 7th ... 435 660
139546 432 ... Townsend at 7th ... 435 660
139547 1523 ... Beale at Market ... 1523 229
139549 1620 ... Powell Street BART ... 1620 540
139550 1617 ... Powell Street BART ... 1620 540
Pour chaque combinaison unique de start_station et end_station, si la durée médiane est :
batrips[, trip_category := {
med_dur = median(duration, na.rm = TRUE)
if (med_dur < 600) "short"
else if (med_dur >= 600 & med_dur <= 1800) "medium"
else "long"
},
by = .(start_station, end_station)]
batrips[1:3]
trip_id duration ... zip_code trip_category
139545 435 ... 94612 short
139546 432 ... 94107 short
139547 1523 ... 94112 short
bin_median_duration <- function(dur) {
med_dur <- median(dur, na.rm = TRUE)
if (med_dur < 600) "short"
else if (med_dur >= 600 & med_dur <= 1800) "medium"
else "long"
}
batrips[, trip_category := bin_median_duration(duration),
by = .(start_station, end_station)]
batrips[duration > 500, min_dur_gt_500 := min(duration),
by = .(start_station, end_station)]
batrips[1:3]
trip_id duration ... zip_code min_dur_gt_500
139545 435 ... 94612 NA
139546 432 ... 94107 NA
139547 1523 ... 94112 502
Manipulation de données avec data.table en R