将随后的非na值设置为NA

时间:2018-02-02 14:40:52

标签: r

将具有非NA值的每个非NA值设置为“他的左边”到NA

数据

a <- c(3,2,3,NA,NA,1,NA,NA,2,1,4,NA)

[1]  3  2  3 NA NA  1 NA NA  2  1  4 NA

期望输出

[1]  3 NA NA NA NA  1 NA NA  2 NA NA NA

我工作但丑陋的解决方案:

IND   <- !(is.na(a)) & data.table::rleidv(!(is.na(a))) %>% duplicated
a[IND]<- NA
a

必须有一个更好的解决方案......

3 个答案:

答案 0 :(得分:4)

可替换地,

a[-1][diff(!is.na(a)) == 0] <- NA; a
# [1]  3 NA NA NA NA  1 NA NA  2 NA NA NA

答案 1 :(得分:2)

您可以执行一个简单的var n = 3; var result; for (i = 1; i <= n; i++) { var result = ''; for(j = 1; j <= n; j++) { if(j !== 1) { result += ' | '; } result += `${i} * ${j} = ${i * j}`; } console.log(result); }语句,在其中添加带有滞后向量ifelse的向量。如果结果为NA,则该值应保持不变。否则,NA,即

a

答案 2 :(得分:2)

为了简洁起见......

a[!is.na(dplyr::lag(a))]<-NA
a
[1]  3 NA NA NA NA  1 NA NA  2 NA NA NA