r从向量中获取最后和第一个非NA元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了r从向量中获取最后和第一个非NA元素相关的知识,希望对你有一定的参考价值。

我有一个数据框

a = c(NA,NA,NA,NA,NA,40,32,46,98,900,NA,NA,78,87,43,78,NA,NA,NA)
b = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)
d = cbind(a,b)

我想从第一个非NA元素到最后一个元素获取部分数据。结果应该是:

40 32 46 98 900 NA Na 78 87 43 78
6   7  8  9  10 11 12 13 14 15 16 

我该如何解决我的问题?

答案

您可以使用na.trim包中的zoo函数

> zoo::na.trim(d)

    a  b
6   40  6
7   32  7
8   46  8
9   98  9
10 900 10
11  NA 11
12  NA 12
13  78 13
14  87 14
15  43 15
16  78 16

注意 - 您还可以查找sides函数的na.trim参数以进行更多更改。

另一答案

一个base R可能是:

d[rev(cumsum(rev(!is.na(a)))) != 0 & cumsum(!is.na(a)) != 0, ]

        a  b
 [1,]  40  6
 [2,]  32  7
 [3,]  46  8
 [4,]  98  9
 [5,] 900 10
 [6,]  NA 11
 [7,]  NA 12
 [8,]  78 13
 [9,]  87 14
[10,]  43 15
[11,]  78 16

在个别步骤中:

rev(cumsum(rev(!is.na(a))))

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

cumsum(!is.na(a))

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

rev(cumsum(rev(!is.na(a)))) != 0 & cumsum(!is.na(a)) != 0

 [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[14]  TRUE  TRUE  TRUE FALSE FALSE FALSE

以上是关于r从向量中获取最后和第一个非NA元素的主要内容,如果未能解决你的问题,请参考以下文章

具有多个NA的向量的备用元素

R中 如何将数据框中的空值显示为NA

R中的元素均值

引用向量的部分片段?

R语言-缺失值判断以及处理

在R向量中“向下”复制单元格值的惯用方法[重复]