r - For 循环不使用 r 插入矩阵中的缺失值

标签 r for-loop matrix interpolation na

我正在尝试在一个矩阵中插入 NA 值,该矩阵包含前 2 列坐标(x 和 y)以及 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

关于r - For 循环不使用 r 插入矩阵中的缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56892476/

相关文章:

for-loop - 是否不鼓励在 Go 中使用单行 for 循环或 if 语句?

Java将数组切割成不均匀矩阵的最快方法

r - 求每一列的最大值和最小值,然后求每一行的最大值和最小值

r - 使用 'dendextend' 在树状图中围绕指定标签绘制矩形

r - 向 GEE 添加交互 - 模型矩阵排名不足

r - r 中大约 10 个因子在集群中的共存饼图

python - 序列或迭代器中的 for 循环

r - 如何为 R 中的 lapply 创建的每个图添加标题?

javascript - 如何监控for循环?

不使用 if-else 语句的 haskell 矩阵幂