R 用小于行的值替换行';在它前面加上插值

R 用小于行的值替换行';在它前面加上插值,r,R,我有整数变量,它们是时间的函数。但是,在某些错误中,值在第二天减小,这是由于人为错误造成的。即 Date Cases 2020-03-03 24 2020-03-02 21 2020-03-01 23 在“案例”中,21是一个错误。如何用插值替换列中小于前面行的值 你可以试试 wrong <- c(0, diff(df$Cases)) < 0 df$Cases[wrong] <- df$Cases[which(wrong) -

我有整数变量,它们是时间的函数。但是,在某些错误中,值在第二天减小,这是由于人为错误造成的。即

Date           Cases
2020-03-03      24
2020-03-02      21
2020-03-01      23
在“案例”中,21是一个错误。如何用插值替换列中小于前面行的值

你可以试试

wrong <- c(0, diff(df$Cases)) < 0
df$Cases[wrong] <- df$Cases[which(wrong) - 1]
使用插值:

df$Date[c(0, diff(df$Cases)) < 0] <- NA
df$Date <- as.POSIXct(zoo::na.approx(df$Date), origin = "1970-01-01")

df$Date[c(0,diff(df$Cases))<0]在
dplyr

library(dplyr)
df1 %>% 
     mutate(Cases = case_when(Cases - lag(Cases, 
       default = first(Cases)) < 0 ~ lag(Cases), TRUE ~ Cases))
#        Date Cases
#1 2020-03-03    24
#2 2020-03-02    24
#3 2020-03-01    23
库(dplyr)
df1%>%
突变(Cases=case_when(Cases-lag)(Cases,
默认值=first(Cases))<0~滞后(Cases),TRUE~滞后(Cases))
#日期案例
#1 2020-03-03    24
#2 2020-03-02    24
#3 2020-03-01    23
数据
df1
Cases
中的值应该是24还是23?它可以是23或24,因为它小于23,这是错误的。第3行中的Cases仍然需要插值,因为它小于24。整个代码不应该在一个循环中吗?@ahb65也许。现在我再看一遍,这个问题有点不清楚了。我认为我的解决方案适用于描述的问题,而不是演示的问题。但是如果作为一个循环来做,它只会
for(i在seq_中沿着(df$Cases)[-1])if(df$Cases[i]library(dplyr)
df1 %>% 
     mutate(Cases = case_when(Cases - lag(Cases, 
       default = first(Cases)) < 0 ~ lag(Cases), TRUE ~ Cases))
#        Date Cases
#1 2020-03-03    24
#2 2020-03-02    24
#3 2020-03-01    23
df1 <- structure(list(Date = c("2020-03-03", "2020-03-02", "2020-03-01"
), Cases = c(24L, 21L, 23L)), class = "data.frame", row.names = c(NA, 
-3L))