Я бы не конвертировал matrix()
в data.frame()
, так как он медленнее и потребляет больше памяти, в то время как операции matrix()
в общем случае быстрее в любом случае.
В дополнение к ответу Дэвида с использованием номера столбцаиндексирование:
dta = dt[dt[,8] >= 800 & dt[,8] <= 849,]
Существует также форма, использующая индексирование имен столбцов с помощью матрицы:
dta = dt[dt[,'metric'] >= 800 & dt[,'metric'] <= 849,]
Как показано командой пакета microbenchmark
для идентичной матрицы с 12 столбцами и13 241 строка с R, скомпилированным с оптимизацией Intel MKL:
microbenchmark::microbenchmark(
test.matrix = mt[mt[,3] %in% 5:10 & mt[,5] == 1,],
test.data.frame = df[df[,3] %in% 5:10 & df[,5] == 1,],
times = 1000
)
Unit: microseconds
expr min lq mean median uq max neval
test.matrix 885.732 938.386 1154.898 943.74 952.4415 138215.318 1000
test.data.frame 1176.218 1245.826 1363.379 1258.32 1286.4320 3392.556 1000
Когда матрицы становятся очень большими, эта разница становится ощутимой.На моей машине скорость индексирования матриц выше, чем у data.table
.