Я собираю данные о том, насколько мои кошки попадают в матрицу:
m <- cbind(fluffy=c(1.1,1.2,1.3,1.4),misterCuddles=c(0.9,NA,1.1,1.0))
row.names(m) <- c("2013-01-01", "2013-01-02", "2013-01-03","2013-01-04")
Что дает мне это:
fluffy misterCuddles
2013-01-01 1.1 0.9
2013-01-02 1.2 NA
2013-01-03 1.3 1.1
2013-01-04 1.4 1.0
В каждый день я хотел бы узнать, сколько дней подряд каждая кошка пошла на номер 2. Таким образом, результирующая матрица должна выглядеть так:
fluffy misterCuddles
2013-01-01 1 1
2013-01-02 2 0
2013-01-03 3 1
2013-01-04 4 2
Есть ли способ сделать это эффективно? Функция cumsum
делает что-то подобное, но это примитив, поэтому я не могу его модифицировать в соответствии с моими грязными, грязными потребностями.
Я мог бы запустить цикл for и сохранить счет так:
m.output <- matrix(nrow=nrow(m),ncol=ncol(m))
for (column in 1:ncol(m)) {
sum <- 0
for (row in 1:nrow(m)) {
if (is.na(m[row,column])) sum <- 0
else sum <- sum + 1
m.output[row,column] <- sum
}
}
Это самый эффективный способ сделать это? У меня много кошек, и я записал летние данные о корме. Могу ли я как-то параллелизировать это по столбцу?