我有一个由随每个ID月度时间序列ID的列的大型数据集。 有在此的频繁缺失值,但我想这样做是零替换第一非零后,所有的NAS,而第一个非零值NA的前离开所有来港定居。
例如。
[1 2 3 4 5]将被改变为[1 2 3 0 4 5 0]
任何帮助或建议你们可以提供将不胜感激!
我有一个由随每个ID月度时间序列ID的列的大型数据集。 有在此的频繁缺失值,但我想这样做是零替换第一非零后,所有的NAS,而第一个非零值NA的前离开所有来港定居。
例如。
[1 2 3 4 5]将被改变为[1 2 3 0 4 5 0]
任何帮助或建议你们可以提供将不胜感激!
容易使用做match()
和数字指标:
match()
找到一个非NA值的第一次出现 which()
以从逻辑矢量转换is.na()
到数字索引 因此:
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
这里的另一种方法。 转换所有到零,然后再变相第一零回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