r - 使用 dplyr 进行线性插值,但跳过具有所有缺失值的组

标签 r dplyr

我正在尝试使用 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/

相关文章:

r - 如何在 R 中滞后矩阵

R - 在 dplyr 中使用 group_by() 和 mutate() 来应用返回组长度向量的函数

r - 无法在 R 中收集 tibble

R:计算列可互换的数据框中的不同组合

r - 自定义管道以消除警告

r - R 中的 sumif 和 countif 等效项

r - ggsignif 包错误 stat_signif 需要以下缺失的美观 : y

RMarkdown 中的 R Shiny 下载按钮

r - 逐行连接 data.table 中各列的名称和值

r - 抑制来自观星者的星星和音符