For循环不使用r在矩阵中插入缺失值
For-loop does not interpolate missing values in matrix using r
我正在尝试在矩阵中插入 NA 值,该矩阵包含带坐标(x 和 y)的前 2 列和带时间相关值的 24 列。所以我设置了 for 循环,它应该根据每行中至少两个值(不包括坐标)为每行插入 NA 值。
所以我想我的问题是,我的 for 循环没有跳到下一行或总是跳到第一个单元格?
我在 Windows 10
上使用 R-Studio 版本 1.2.1335 和 R-版本 3.4.4
完整的矩阵最多为第 "layer.24" 行和第 492528 列
x y layer.1 layer.2 layer.3 layer.4
[1,] 562201.9 5723273 8148 7031 7219 5824
[2,] 562463.6 5723273 NA NA NA NA
[3,] 562725.3 5723273 4188 NA NA 4200
[4,] 562987.0 5723273 4237 NA NA NA
[5,] 563248.7 5723273 3468 NA 5277 4888
[6,] 563510.5 5723273 3310 NA 5277 5095
for (i in 1:length(matrix[,1]))
{
if (sum(is.na(matrix[i,3:26])>1))
{matrix[i,3:26] = imputeTS::na.interpolation(matrix[i,3:26])}
}
所以我希望得到一个插值矩阵,但本例中的第 4 行除外。
我们可以这样操作(先转换为data.frame
(此处命名为df
)):
to_replace <- df[apply(df, 1,function(x) sum(is.na(x))>2),]
t(apply(to_replace,1,function(x) imputeTS::na.interpolation(x)))
x y layer.1 layer.2 layer.3 layer.4
2 562463.6 5723273 5723273 5723273 5723273 5723273
4 562987.0 5723273 4237 4237 4237 4237
您可以将值存储回 to_replace
。
如果你想要少于两个 NA
的那些,那么:
to_replace <- df[apply(df, 1,function(x) sum(is.na(x))<2),]
t(apply(to_replace,1,function(x) imputeTS::na.interpolation(x)))
x y layer.1 layer.2 layer.3 layer.4
1 562201.9 5723273 8148 7031.0 7219 5824
5 563248.7 5723273 3468 4372.5 5277 4888
6 563510.5 5723273 3310 4293.5 5277 5095
我正在尝试在矩阵中插入 NA 值,该矩阵包含带坐标(x 和 y)的前 2 列和带时间相关值的 24 列。所以我设置了 for 循环,它应该根据每行中至少两个值(不包括坐标)为每行插入 NA 值。 所以我想我的问题是,我的 for 循环没有跳到下一行或总是跳到第一个单元格?
我在 Windows 10
上使用 R-Studio 版本 1.2.1335 和 R-版本 3.4.4完整的矩阵最多为第 "layer.24" 行和第 492528 列
x y layer.1 layer.2 layer.3 layer.4
[1,] 562201.9 5723273 8148 7031 7219 5824
[2,] 562463.6 5723273 NA NA NA NA
[3,] 562725.3 5723273 4188 NA NA 4200
[4,] 562987.0 5723273 4237 NA NA NA
[5,] 563248.7 5723273 3468 NA 5277 4888
[6,] 563510.5 5723273 3310 NA 5277 5095
for (i in 1:length(matrix[,1]))
{
if (sum(is.na(matrix[i,3:26])>1))
{matrix[i,3:26] = imputeTS::na.interpolation(matrix[i,3:26])}
}
所以我希望得到一个插值矩阵,但本例中的第 4 行除外。
我们可以这样操作(先转换为data.frame
(此处命名为df
)):
to_replace <- df[apply(df, 1,function(x) sum(is.na(x))>2),]
t(apply(to_replace,1,function(x) imputeTS::na.interpolation(x)))
x y layer.1 layer.2 layer.3 layer.4
2 562463.6 5723273 5723273 5723273 5723273 5723273
4 562987.0 5723273 4237 4237 4237 4237
您可以将值存储回 to_replace
。
如果你想要少于两个 NA
的那些,那么:
to_replace <- df[apply(df, 1,function(x) sum(is.na(x))<2),]
t(apply(to_replace,1,function(x) imputeTS::na.interpolation(x)))
x y layer.1 layer.2 layer.3 layer.4
1 562201.9 5723273 8148 7031.0 7219 5824
5 563248.7 5723273 3468 4372.5 5277 4888
6 563510.5 5723273 3310 4293.5 5277 5095