我正在尝试使用 dplyr 和 approx() 在组内线性插值值,不幸的是,某些组具有所有缺失值,因此我希望近似跳过这些组并继续处理其余组。我不想推断或使用最近的相邻观测数据。
这是数据示例。第一组(按 id)全部缺失,另一组应该进行插值。
data <- read.csv(text="
id,year,value
c1,1998,NA
c1,1999,NA
c1,2000,NA
c1,2001,NA
c2,1998,14
c2,1999,NA
c2,2000,NA
c2,2001,18")
dataIpol <- data %>%
group_by(id) %>%
arrange(id, year) %>%
mutate(valueIpol = approx(year, value, year,
method = "linear", rule = 1, f = 0, ties = mean)$y)
但是我收到了错误
Error: need at least two non-NA values to interpolate
如果我删除全部丢失的组,我不会收到此错误,但这是不可行的。
最佳答案
我们可以通过添加具有所需数据点数量的过滤器
步骤来解决此问题:
library(dplyr)
dataIpol <- data %>%
group_by(id) %>%
arrange(id, year) %>%
filter(sum(!is.na(value))>=2) %>% #filter!
mutate(valueIpol = approx(year, value, year,
method = "linear", rule = 1, f = 0, ties = mean)$y)
这里我们对值列中非 NA 项的数量进行求和,并删除任何没有 >=2
的组。
关于r - 使用 dplyr 进行线性插值,但跳过具有所有缺失值的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37401196/