-->

[R转换NA的只有后的第一个非零值(R Convert NA's only after th

2019-09-26 10:16发布

我有一个由随每个ID月度时间序列ID的列的大型数据集。 有在此的频繁缺失值,但我想这样做是零替换第一非零后,所有的NAS,而第一个非零值NA的前离开所有来港定居。

例如。

[1 2 3 4 5]将被改变为[1 2 3 0 4 5 0]

任何帮助或建议你们可以提供将不胜感激!

Answer 1:

容易使用做match()和数字指标:

  • 使用match()找到一个非NA值的第一次出现
  • 使用which()以从逻辑矢量转换is.na()到数字索引
  • 利用这些信息来查找X中的正确位置

因此:

x <- c(NA,NA,NA,1,2,3,NA,NA,4,5,NA)
isna <- is.na(x)
nonna <- match(FALSE,isna)
id <- which(isna)
x[id[id>nonna]] <- 0

得到:

> x
 [1] NA NA NA  1  2  3  0  0  4  5  0


Answer 2:

这里的另一种方法。 转换所有到零,然后再变相第一零回NA

> x <- c(NA,NA,NA,1,2,3,NA,NA,4,5,NA)
> x[which(is.na(x))] <- 0
### index from 1 to first element before the first element >0
> x[1:min(which(x>0))-1] <- NA
> x
 [1] NA NA NA  1  2  3  0  0  4  5  0

### end of vector (elements are >0)
> endOfVec <- min(which(x>0)):length(x)
> x[endOfVec][is.na(x[endOfVec])] <- 0
[1] NA NA NA  1  2  3  0  0  4  5  0


文章来源: R Convert NA's only after the first non-zero value
标签: r nan statistics