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