数据看起来像这样:
目标是将maint的值设置为imds中的最后一个值。
在此时,当需要跳过IMSL数据时,diff_maint_row_to_change的数字大于1,而在需要调整连续维护行时,其值为1。 调整是将维护行的cum_ft值设置为IMSL数据的最后一个值。
我想写的内容应该像下面的表达式,但我不清楚如何得出last_imds_row。在本例中,maint_rows_to_change = c(11,12,13),last_imds_row = c(10,10,10)。
cum_ft source
125.4585 imds
125.4585 imds
125.4585 imds
125.4585 imds
125.4585 imds
125.4585 imds
123.1018 imds
125.4585 imds
125.4585 imds
125.4585 imds
0.0000 maint
0.0000 maint
0.0000 maint
126.7622 imds
126.7622 imds
126.7622 imds
目标是将maint的值设置为imds中的最后一个值。
cum_ft source
123.1018 imds
125.4585 imds
125.4585 imds
125.4585 imds
125.4585 imds
125.4585 imds
125.4585 imds
125.4585 imds
125.4585 imds
125.4585 imds
125.4585 maint
125.4585 maint
125.4585 maint
126.7622 imds
126.7622 imds
126.7622 imds
我一直在尝试做某件事情,但是没有成功,类似于:
maint_rows_to_change = which(temp_df$source=="maint")
diff_maint_row_to_change = diff(maint_rows_to_change)
imds_rows_with_data = which(temp_df$source=="imds")
diff_imds_row_to_change = diff(imds_rows_with_data)
rows_to_change_increment = which(diff_update_row > 1)
在此时,当需要跳过IMSL数据时,diff_maint_row_to_change的数字大于1,而在需要调整连续维护行时,其值为1。 调整是将维护行的cum_ft值设置为IMSL数据的最后一个值。
我想写的内容应该像下面的表达式,但我不清楚如何得出last_imds_row。在本例中,maint_rows_to_change = c(11,12,13),last_imds_row = c(10,10,10)。
temp_df$cum_ft[maint_rows_to_change] = temp_df$cum_ft[last_imds_row]
我还尝试了循环,有一定的成功,但是时间太长。
fun1 <- function(z) {
z$cum_ft_cor = z$cum_ft
rows_to_fix = which(z$source=="maint")
z$cum_ft_cor[rows_to_fix]=-1
for(i in rows_to_fix) {
z$cum_ft_cor[i] <- z$cum_ft_cor[i-1]
}
z
}
temp_df_2 = fun1(temp_df)
NA
,然后使用na.locf()
函数?当然,这取决于您的数据集的其他部分如何以及它是否按照正确的顺序排列。 - Stulibrary(zoo) ; temp_df[temp_df$source == "maint", "cum_ft"] <- NA ; temp_df$cum_ft <- na.locf(temp_df$cum_ft)
- David Arenburg