合并两个data.frame后如何替换NA值?

时间:2015-08-13 13:09:55

标签: r

我有两个data.frame如下:

> a <- data.frame(x=c(1,2,3,4,5,6,7,8), y=c(1,3,5,7,9,11,13,15))
> a
  x  y
1 1  1
2 2  3
3 3  5
4 4  7
5 5  9
6 6 11
7 7 13
8 8 15

> b <- data.frame(x=c(1,5,7), z=c(2, 4, 6))
> b
  x z
1 1 2
2 5 4
3 7 6

然后我使用&#34;加入&#34;对于两个data.frames:

> c <- join(a, b, by="x", type="left")
> c
  x  y  z
1 1  1  2
2 2  3 NA
3 3  5 NA
4 4  7 NA
5 5  9  4
6 6 11 NA
7 7 13  6
8 8 15 NA

我的要求是用当前位置之前的最后一个None-Na值替换Z列中的NA。我想要这样的结果:

> c
  x  y  z
1 1  1  2
2 2  3  2
3 3  5  2
4 4  7  2
5 5  9  4
6 6 11  4
7 7 13  6
8 8 15  6

1 个答案:

答案 0 :(得分:1)

这一次(如果您的数据不是太大),循环是一个优雅的选择:

for(i in which(is.na(c$z))){
  c$z[i] = c$z[i-1]
}

给出:

> c
  x  y z
1 1  1 2
2 2  3 2
3 3  5 2
4 4  7 2
5 5  9 4
6 6 11 4
7 7 13 6
8 8 15 6

数据:

library(plyr)
a <- data.frame(x=c(1,2,3,4,5,6,7,8), y=c(1,3,5,7,9,11,13,15))
b <- data.frame(x=c(1,5,7), z=c(2, 4, 6))
c <- join(a, b, by="x", type="left")

您可能还想检查na.locf包中的zoo