用R中相邻列中的值替换NA的函数/循环

用R中相邻列中的值替换NA的函数/循环,r,R,我有一个包含1000列的时间序列数据集。当然,每一行都是不同的记录。有些NA值分散在整个数据集中 我想用相邻的左值或相邻的右值替换每个NA,不管是哪个 一个简洁的解决方案,也是我想要的,就是用右边的值替换每个NA,除非它在最后一列中,在这种情况下,用左边的值替换它 我只是想做一个for循环,但我认为函数会更有效。基本上,我不确定如何引用相邻的值 以下是我所尝试的: for (entry in dataset) { if (any(is.na(entry)) == TRUE &&am

我有一个包含1000列的时间序列数据集。当然,每一行都是不同的记录。有些NA值分散在整个数据集中

我想用相邻的左值或相邻的右值替换每个NA,不管是哪个

一个简洁的解决方案,也是我想要的,就是用右边的值替换每个NA,除非它在最后一列中,在这种情况下,用左边的值替换它


我只是想做一个for循环,但我认为函数会更有效。基本上,我不确定如何引用相邻的值

以下是我所尝试的:

for (entry in dataset) {
  if (any(is.na(entry)) == TRUE && entry[,1:999]) {
    entry = entry[,1]
  }
  else if (any(is.na(entry)) == TRUE && entry[,1000]) {
    entry = cell[,-1]
  }
}

正如您所知,我对R:)不太熟悉。我不确定如何将值索引到左侧或右侧。

我建议在数据集的转置上使用
na.locf

zoo
程序包的na.locf函数用于将
na
替换为最接近的值(+1或-1)。由于您需要列,我们可以先转置数据集:

library(zoo)
df=matrix(c(1,3,4,10,NA,52,NA, 11, 100), ncol=3)
step1 <-  t(na.locf(t(df), fromLast=T))
step2 <-  t(na.locf(t(step1), fromLast=F))
print(df)
#### [1,]    1   10   NA
#### [2,]    3   NA   11
#### [3,]    4   52  100
print(step2)
#### [1,]    1   10   10
#### [2,]    3   11   11
#### [3,]    4   52  100

一个小小的例子将大有帮助
library(dplyr)
MyReplace = function(data) {data %>% t %>% na.locf(.,,T) %>% na.locf %>% t}
MyReplace(df)