определить начальные и конечные сроки разделов АН - PullRequest
3 голосов
/ 02 ноября 2011

Допустим, у меня есть некоторые данные в R, которые выглядят так:

c(0.11, NA, NA, NA, 2.76, 3.65, NA, NA, NA, NA, 1.56)

Как можно эффективно извлечь начальный и конечный члены каждого "блока" из значений NA?Если бы результатом был фрейм данных, я бы хотел, чтобы он выглядел примерно так:

  first.na last.na
1        2       4
2        7      10

Я пытаюсь научиться избегать циклов for, так как я буду выполнять этот тип операциидля очень больших наборов данных (порядка 1e9 членов), и na.omit не очень полезно.

1 Ответ

5 голосов
/ 02 ноября 2011

Возможно, есть функция для выполнения этой работы, но вы можете сделать это:

> z <- c(0.11, NA, NA, NA, 2.76, 3.65, NA, NA, NA, NA, 6)

> z2 <- diff(is.na(c(0, z, 0)))
> data.frame(first.na = which(z2 == 1), last.na = which(z2 == -1)-1)
  first.na last.na
1        2       4
2        7      10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...