Разделить числовой вектор по NoData - PullRequest
2 голосов
/ 03 октября 2019

У меня есть числовой вектор с некоторыми значениями NoData. Как я могу разделить его на векторы, используя NoData в качестве точек разрыва?

Пример данных:

set.seed(1)    
a <- as.integer(runif(30, 0, 10))
a[1] <- NaN
a[10] <- NaN

    > a
 [1] NaN   3   5   9   2   8   9   6   6 NaN   2   1   6   3   7   4   7   9   3   7   9   2   6   1   2   3   0   3   8   3

Таким образом, выходные данные будут группировать данные по непрерывным векторам:

[1] 3 5 9 2 8 9 6 6

[1] 2 1 6 3 7 4 7 9 3 7 9 2 6 1 2 3 0 3 8 3

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Опция с rleid

libary(data.table)
grp <- rleid(is.nan(a))
split(a[!is.nan(a)], grp[!is.nan(a)])
#$`2`
#[1] 3 5 9 2 8 9 6 6

$`4`
#[1] 2 1 6 3 7 4 7 9 3 7 9 2 6 1 2 3 0 3 8 3
1 голос
/ 03 октября 2019

Мы можем использовать split

split(a, cumsum(is.na(a)))

Однако первым элементом каждого списка может быть NA, который можно удалить с помощью sapply

sapply(split(a, cumsum(is.na(a))), function(x) x[!is.na(x)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...