У меня есть data.frame действительно большой (на самом деле data.table). Теперь, чтобы упростить вещи, допустим, что мой data.frame выглядит следующим образом:
x <- c(1, 1, 0, 0, 1, 0, 0, NA, NA, 0)
y <- c(1 ,0 ,NA, NA, 0, 0, 0, 1, 1, 0)
mydf <- data.frame(rbind(x,y))
Я хотел бы определить, в какой строке (если таковая имеется) последняя последовательность формируется тремя последовательными нулями, не считая NA. Итак, в приведенном выше примере первая строка имеет три последовательных нуля в последней последовательности, но не вторую.
Я знаю, как это сделать, если только у меня есть вектор (а не data.frame):
runs <- rle(x[is.na(x)==F])
runs$lengths[length(runs$lengths)] > 2 & runs$values[length(runs$lengths)]==0
Я, очевидно, могу сделать цикл, и у меня будет то, что я хочу. Но это будет невероятно неэффективно, и мой фактический data.frame довольно большой. Итак, какие-либо идеи о том, как это сделать самым быстрым способом?
Я предполагаю, что это применимо, но я не могу думать об использовании его прямо сейчас. Кроме того, возможно, есть способ data.table сделать это?
ps: На самом деле, этот data.frame является измененной версией моей исходной таблицы данных. Если каким-то образом я смогу выполнить работу с data.frame в исходном формате, это нормально. Чтобы узнать, как мой исходный файл data.frame, просто подумайте об этом как:
x <- c(1, 1, 0, 0, 1, 0, 0, 0)
y <- c(1 ,0 , 0, 0, 0, 1, 1, 0)
myOriginalDf <- data.frame(value=c(x,y), id=rep(c('x','y'), c(length(x), length(y))))