Работа с данными с помощью data.table в R
Matt Dowle, Arun Srinivasan
Instructors, DataCamp
Допустим, нам нужно изменить 2-ю строку столбца "y" на 10
df <- data.frame(x = 1:5, y = 6:10)
df
x y
1 6
2 7
df$y[2] <- 10
В R < v3.1.0 эта операция приводила к глубокому копированию всего data.frame
# what happens internally prior to R v3.1.0
tmp <- <deep copy of "df">
tmp$y[2] <- 10
df <- tmp
В версии 3.1.0 были внесены улучшения: теперь глубоко копируется только обновляемый столбец
В данном случае при операции с df глубоко копируются только столбцы a и b
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
data.table обновляет столбцы на месте, то есть по ссылке
Это означает, что присваивать результат переменной не нужно
При изменении значений столбцов никакие копии не создаются
data.table использует новый оператор := для добавления, обновления и удаления столбцов по ссылке
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]
batrips[, `:=`(is_dur_gt_1hour = NULL,
start_station = toupper(start_station))]
Работа с данными с помощью data.table в R