Эффективный способ присвоения значений в зависимости от интервала столбца для каждой строки - PullRequest
1 голос
/ 02 марта 2020

Я хочу обновить столбцы (добавить 1) в зависимости от диапазона значений, который варьируется в каждой строке. Моя попытка повторения строки за строкой оказывается медленной. Я покажу небольшой пример.

M <- matrix(0,nrow = 50*10^3,ncol = 100)
library(data.table)
M <- as.data.table(M)
n <- nrow(M)
set.seed(4234)
M[, `:=` (a=sample(50,n,replace = T),
          b=sample(50:100,n,replace = T))]

for (x in 1:n) 
  set(M,i=x,j=M[['a']][x]:M[['b']][x], value = 1L)

Есть ли способ увеличить скорость с помощью этого расчета?

1 Ответ

0 голосов
/ 03 марта 2020

Вот еще один вариант:

cols <- paste0("V", 1L:100L)
M[, (cols) := {
    m <- as.matrix(.SD)
    l <- mapply(function(x,y) seq(x, y), a, b, SIMPLIFY=FALSE)
    m[cbind(rep(1L:.N, lengths(l)), unlist(l))] <- 1L
    as.data.table(m)
}, .SDcols=cols]
...