Вычитание строки 2 из строки 1 в столбик
У меня есть объект Tibble в R, который выглядит следующим образом:
Для каждого столбца я хочу вычесть row1 из row2. Мой текущий подход ниже:
mean.diff <- each.group.mean[1,2:num.groups]-each.group.mean[2,2:num.centroids]
Что сбивает с толку, так это то, что для выполнения этого оператора в тибле 2x9660 коду требуется 8-15 секунд, что определяется вычислением Sys.time(). Был бы признателен за любую помощь, чтобы сделать это быстрее и понять, почему эта команда занимает так много времени.
1 ответ
Решение
От unlist
Однако, мы могли бы преобразовать это в vector
и сделать его более эффективным
unlist(each.group.mean[1,2:num.groups], use.names = FALSE)-
unlist(each.group.mean[2,2:num.centroids], use.names = FALSE)
Причина в том, что data.frame
или же tibble
и т.д. имеют много атрибутов класса, что замедляет выполнение подмножества, а затем вычисление. Преобразовав в vector
все эти классы сняты. Используя воспроизводимый пример
данные
set.seed(24)
df1 <- as.tibble(as.data.frame(matrix(sample(1:10, 9660*10,
replace = TRUE), ncol = 9660)))
Ориентиры
system.time(df1[1,] - df1[2,])
# user system elapsed
# 0.78 0.00 0.78
system.time(unlist(df1[1,], use.names = FALSE) - unlist(df1[2,], use.names = FALSE))
# user system elapsed
# 0.03 0.00 0.03