检查系列中的值是否严格增加,而不是NA

时间:2015-10-12 16:08:49

标签: r function

我需要使用

的功能清理数据
  • 检查值列(grad_rate_yr_val)中的元素是否为NA,如果是,则将子集中的所有后续值替换为NA(其中后续值由{{1}定义}})和数据是在我的函数下面的子集
  • 检查系列中的任何后续值是否减少(即非严格增加),如果是,则将所有后续值替换为grad_rate_yr_num

我已成功完成以下功能中的第一个要点。但是,我可以在第二个要点上使用一些帮助。

这是我的功能:

NA

以下是我的数据的一个子集,以防您想用它来测试您的解决方案:

 testit <- function(all.long){
  for(i in unique(all.long$program_nm)){
    for(ii in 1:8){
      for(iii in unique(all.long$cohort_year[all.long$program_nm == i & all.long$grad_rate_yr_num  == ii]))
      {
        if(is.na(all.long[all.long$program_nm == i & all.long$grad_rate_yr_num == ii
                          & all.long$cohort_year == iii, "grad_rate_yr_val"]))
        {
          n <- ii + 1
          all.long[all.long$program_nm == i & all.long$grad_rate_yr_num  >= n
                   & all.long$cohort_year == iii, "grad_rate_yr_val"]        <- NA
        }
      }
    }
  }
  return(all.long)
}

1 个答案:

答案 0 :(得分:2)

你说第一颗子弹已经处理过,所以我只看第二颗:

  

检查系列中的任何后续值是否减少(即非严格增加),如果是,则将所有后续值替换为NA

x减少

# example data
set.seed(1)
x = sample(10) 
# 3  4  5  7  2  8  9  6 10  1

replace(x, seq_along(x) >= which(x < cummax(x))[1], NA)
# 3  4  5  7 NA NA NA NA NA NA

which(x < cummax(x))是系列减少的位置。回答almost entirely borrowed from @flodel。如果这确实是答案,那么这个问题可能应该被视为一个骗局。

x并未严格增加

需要进行一些修改才能达到&#34;不严格增加,&#34;喜欢

# new example
set.seed(1)
x = sample(c(1:3,1:3,1:3))
# 3 3 2 3 2 1 2 1 1

r <- rank(x) + sort(runif(length(x)), decreasing=TRUE)
x <- replace(x, seq_along(x) >= which(r < cummax(r))[1], NA)
x
# 3 NA NA NA NA NA NA NA NA

这个想法是taken from @Arun

相关问题