R 将NA替换为NA前后病例的平均值

R 将NA替换为NA前后病例的平均值,r,replace,average,na,R,Replace,Average,Na,假设我有以下data.frame: t<-c(1,1,2,4,5,4) u<-c(1,3,4,5,4,2) v<-c(2,3,4,5,NA,2) w<-c(NA,3,4,5,2,3) x<-c(2,3,4,5,6,NA) df<-data.frame(t,u,v,w,x) t问题涉及第4行以NA开头,第5行以NA结尾,但事实上,输入的第4列df以NA开头,输入的第5列以NA结尾,并且输入的第4行和第5行都不是以NA开头或结尾,因此我们假设该列是指,而不是指

假设我有以下data.frame:

t<-c(1,1,2,4,5,4)
u<-c(1,3,4,5,4,2)
v<-c(2,3,4,5,NA,2)
w<-c(NA,3,4,5,2,3)
x<-c(2,3,4,5,6,NA)

df<-data.frame(t,u,v,w,x)

t问题涉及第4行以NA开头,第5行以NA结尾,但事实上,输入的第4列
df
以NA开头,输入的第5列以NA结尾,并且输入的第4行和第5行都不是以NA开头或结尾,因此我们假设该列是指,而不是指行。问题中还有两个数据帧,均命名为
df
。显然,一个数据框代表输入,另一个同名数据框代表输出,但为了完全清楚起见,我们重复了我们在末尾注释中使用的
df
的定义

na.approx
在动物园里几乎就是这样。(如果矩阵结果正常,则省略
data.frame()
部分。)

给予:

  t u   v w x
1 1 1 2.0 3 2
2 1 3 3.0 3 3
3 2 4 4.0 4 4
4 4 5 5.0 5 5
5 5 4 3.5 2 6
6 4 2 2.0 3 6
注意:为清晰起见,我们使用此数据框作为上述输入:

df <- structure(list(t = c(1, 1, 2, 4, 5, 4), u = c(1, 3, 4, 5, 4, 
2), v = c(2, 3, 4, 5, NA, 2), w = c(NA, 3, 4, 5, 2, 3), x = c(2, 
3, 4, 5, 6, NA)), .Names = c("t", "u", "v", "w", "x"), row.names = c(NA, 
-6L), class = "data.frame")

df请编辑您的问题,而不是将您的输出放在注释中。请尝试查看
动物园中的
na.aggregate
,以下案例和前一案例是什么意思?选择数据并按control k。这将使它缩进4个空格,在这种情况下,它的格式将正确。感谢您的思考@迈克:我指的是萨门行中NA之前和之后的数值。因此,我还没有找到正确的选择。对不起,我不清楚@G:谢谢你的帮助!
  t u   v w x
1 1 1 2.0 3 2
2 1 3 3.0 3 3
3 2 4 4.0 4 4
4 4 5 5.0 5 5
5 5 4 3.5 2 6
6 4 2 2.0 3 6
df <- structure(list(t = c(1, 1, 2, 4, 5, 4), u = c(1, 3, 4, 5, 4, 
2), v = c(2, 3, 4, 5, NA, 2), w = c(NA, 3, 4, 5, 2, 3), x = c(2, 
3, 4, 5, 6, NA)), .Names = c("t", "u", "v", "w", "x"), row.names = c(NA, 
-6L), class = "data.frame")
sapply(df, function(x){
    replace(x, is.na(x), rowMeans(cbind(c(NA, head(x, -1)), c(x[-1], NA)), na.rm = TRUE)[is.na(x)])
})
#     t u   v w x
#[1,] 1 1 2.0 3 2
#[2,] 1 3 3.0 3 3
#[3,] 2 4 4.0 4 4
#[4,] 4 5 5.0 5 5
#[5,] 5 4 3.5 2 6
#[6,] 4 2 2.0 3 6