我正在尝试使用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)
如果我摆脱了所有缺失但不可行的群体,我不会得到这个错误。
答案 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
的所有组。