我有一些整数变量是时间函数。然而,由于人为错误,存在值在一天之后下降的错误。例如:
Date Cases
2020-03-03 24
2020-03-02 21
2020-03-01 23
在“Cases”中,21是一个错误。我该如何用插值方式替换列中小于它们前面行的值?
我有一些整数变量是时间函数。然而,由于人为错误,存在值在一天之后下降的错误。例如:
Date Cases
2020-03-03 24
2020-03-02 21
2020-03-01 23
在“Cases”中,21是一个错误。我该如何用插值方式替换列中小于它们前面行的值?
您可以尝试
wrong <- c(0, diff(df$Cases)) < 0
df$Cases[wrong] <- df$Cases[which(wrong) - 1]
结果:
df
#> Date Cases
#> 1 2020-03-03 24
#> 2 2020-03-02 24
#> 3 2020-03-01 23
for(i in seq_along(df$Cases)[-1]) if(df$Cases[i] < df$Cases[i - 1]) df$Cases[i] <- df$Cases[i - 1]
。 - Allan Camerondplyr
中 case_when
的选项
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))
使用插值:
df$Date[c(0, diff(df$Cases)) < 0] <- NA
df$Date <- as.POSIXct(zoo::na.approx(df$Date), origin = "1970-01-01")
或者如果你想要插值Cases:
df$Cases[c(0, diff(df$Cases)) < 0] <- NA
df$Cases <- zoo::na.approx(df$Cases)
Cases
中的值应该是 24 还是 23? - Matt