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元素的主要内容,如果未能解决你的问题,请参考以下文章