【发布时间】:2018-05-04 03:47:24
【问题描述】:
样本数据
1/1/2000 NA NA NA 29.71 NA
1/2/2000 NA NA NA NA NA
1/3/2000 NA NA NA NA NA
1/4/2000 NA NA NA 29.25 NA
1/5/2000 NA NA NA 30.28 NA
1/6/2000 NA NA NA 27.66 NA
1/7/2000 NA NA NA 27.22 NA
1/8/2000 NA NA NA 27.27 NA
1/9/2000 170 4.1 NA 5.24 NA
1/10/2000 NA NA NA NA NA
1/11/2000 NA NA NA 27.65 NA
1/12/2000 NA NA NA 28.28 100.57
1/13/2000 NA NA NA 27.52 NA
我正在尝试插入很多 NA 值。
我有唯一的日期(键),但大多数 [其他] 数据列以 NULL/NA 值开始/结束(combined_data_z[,a])。我想根据日期插入这些 [其他] 列的空值,尝试时出现此错误
Error in approx(x[!na], y[!na], xout, ...) : need at least two non-NA values to interpolate
library(zoo)
#start with 2 because 1st column is date
a=2
for (i in parsedList)
{
dates <- combined_data_z[,1]
test1 <- combined_data_z[,a]
test1_z <- zoo(test1)
test1_z_approx <- na.fill(na.approx(test1_z, x=dates, rule=2, na.rm = FALSE), "extend")
#print(test1_z_approx)
a=a+1
}
更新:显然它与 for 循环有关,当我删除它并使用 print 语句进行测试并从那里构建时,我发现它在不括在括号中时有效(但我需要循环)。
dates <- combined_data_z[,1]
test1 <- combined_data_z[,4]
test1_z <- zoo(test1)
test1_z_approx <- na.fill(na.approx(test1_z, x=dates, rule=2, na.rm = FALSE), "extend")
print(test1_z_approx)
【问题讨论】:
-
您能否检查所有列是否至少有 2 个非缺失值。看起来您的数据集中至少有一列有 1 个或没有非缺失值。要检查列中有多少非缺失值,您可以在循环中执行 sum(!is.na( combine_data_z[,a]))
-
我确认了。我的数据集的副本可以在这里找到:thistleknot.sytes.net/wordpress/wp-content/uploads/2018/04/…
标签: r interpolation