我需要使用
的功能清理数据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)
}
答案 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。