如何系统地替换<;NA>;在R数据框中具有前面值的行

如何系统地替换<;NA>;在R数据框中具有前面值的行,r,R,我的数据如下所示: FOO,yyy,Unigene126925_All,Unigene137063_All,0.238087 ,,Unigene126925_All,Unigene24551_All,0.374231 ,,Unigene126925_All,Unigene31835_All,0.367897 BAR,xxx,Unigene126925_All,Unigene165366_All,0.247844 ,,Unigene126925_All,Unigene111784_All,0.34

我的数据如下所示:

FOO,yyy,Unigene126925_All,Unigene137063_All,0.238087
,,Unigene126925_All,Unigene24551_All,0.374231
,,Unigene126925_All,Unigene31835_All,0.367897
BAR,xxx,Unigene126925_All,Unigene165366_All,0.247844
,,Unigene126925_All,Unigene111784_All,0.344493
在使用以下代码阅读之后:

 dt <- read.csv("http://dpaste.com/1612639/plain/",header=FALSE,fill=FALSE,na.strings = "")
 # The <NA> coercion here is intentional.
在上面的示例中,第二行有NA,它必须从前面包含值的行中获取V1和V2列的值


如何在R中实现这一点?

您可以使用
na.locf
函数(包):


您可以使用
na.locf
功能(软件包):

> dt
    V1   V2                V3                V4       V5
1  FOO  yyy Unigene126925_All Unigene137063_All 0.238087
2 <NA> <NA> Unigene126925_All  Unigene24551_All 0.374231
3 <NA> <NA> Unigene126925_All  Unigene31835_All 0.367897
4  BAR  xxx Unigene126925_All Unigene165366_All 0.247844
5 <NA> <NA> Unigene126925_All Unigene111784_All 0.344493
FOO yyy Unigene126925_All Unigene137063_All 0.238087
FOO yyy Unigene126925_All  Unigene24551_All 0.374231
FOO yyy Unigene126925_All  Unigene31835_All 0.367897
BAR xxx Unigene126925_All Unigene165366_All 0.247844
BAR xxx Unigene126925_All Unigene111784_All 0.344493
library(zoo)

dt$V1 <- na.locf(dt$V1) 
dt$V2 <- na.locf(dt$V2)
dt <- na.locf(dt)
> dt
   V1  V2                V3                V4       V5
1 FOO yyy Unigene126925_All Unigene137063_All 0.238087
2 FOO yyy Unigene126925_All  Unigene24551_All 0.374231
3 FOO yyy Unigene126925_All  Unigene31835_All 0.367897
4 BAR xxx Unigene126925_All Unigene165366_All 0.247844
5 BAR xxx Unigene126925_All Unigene111784_All 0.344493