【发布时间】:2016-02-22 06:09:45
【问题描述】:
我有一个非常大的数据集,其结构如下所示。
我一直在尝试使用 na.spline 函数来
1) 确定缺少 Yield 的“fips”类别。
2) 如果少于 3 个 Yield 值是每个 fips 的 NA(此处为 1-3),则样条函数应启动并填写 NA。
3) 如果“fips”的 3 个或更多 Yields 不适用,则代码应删除整个“fips”子集,在这种情况下应删除 fips 2。
到目前为止我的代码:
finX <- dataset
finxx <- transform(subset(finX, ave(na.spline(finX$Yield), fips, FUN=sum)<2))
#or
finxx <- transform(subset(finX, ave(is.na(finX$Yield), fips, FUN=sum)<2))
Year fips Max Min Rain Yield
1980 1 24.7 0.0 71 37
1981 1 22.8 0.0 62 40
1982 1 22.6 0.0 47 37
1983 1 24.2 0.0 51 39
1984 1 23.8 0.0 61 47
1985 1 25.1 0.0 67 43
1980 2 24.8 0.0 72 34
1981 2 23.2 0.4 54 **NA**
1982 2 25.3 0.1 83 55
1983 2 23.0 0.0 68 **NA**
1984 2 22.4 0.7 70 **NA**
1985 2 24.6 0.0 47 31
1980 3 25.5 0.0 51 31
1981 3 25.5 0.0 51 31
1982 3 25.5 0.0 51 31
1983 3 25.5 0.0 51 **NA**
1984 3 25.5 0.0 51 31
...
目前上述代码要么没有填写最终产品中的所有NA,要么根本没有结果。
任何指导都会非常有用,谢谢。
【问题讨论】:
-
在这种情况下,可能还值得看看像 AMELIA 这样的插补包。由于 na.spline 只是在 Yield 变量上进行插值。其他变量(如 Rain、Max)中可能有有用的信息,这些信息与产量相关,可能有助于改进 NA 的估计。 AMELIA 可以使用这些变量间相关性,而 zoo 或 imputeTS 包中的单变量时间序列插补方法则不能。
标签: r conditional-statements spline