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

时间:2016-05-23 21:55:10

标签: r dplyr

我正在尝试使用dplyr和approx()来对组内的值进行线性插值。不幸的是,有些组具有所有缺失值,因此我希望近似值只是跳过这些组并继续进行其余操作。我不想推断或使用最近的邻近观察数据。

这是一个数据示例。第一组(通过id)全部缺失,另一组应该进行插值。

Friend Function GetSuccessMsg(ndx As Int32) As String
    If ndx < successes.Count Then
        Return successes(ndx).ToString().
            Replace("[", "").Replace("]", "").
            Replace("""", "").Trim()
    End If
    Return String.Empty
End Function

Console.WriteLine(jData(0).result.StatusA.GetSuccessMsg(0))

但后来我收到了错误

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)

如果我摆脱了所有缺失但不可行的群体,我不会得到这个错误。

1 个答案:

答案 0 :(得分:2)

我们可以通过添加filter步骤并使用所需数量的数据点来解决此问题:

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的所有组。