用NoData分割数值向量

时间:2019-10-03 09:12:30

标签: r

我有一个带有一些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 个答案:

答案 0 :(得分:1)

我们可以使用split

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

但是,每个列表的第一个元素可以是NA,可以用sapply删除

sapply(split(a, cumsum(is.na(a))), function(x) x[!is.na(x)])

答案 1 :(得分:1)

带有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