2014-02-13 115 views
1

我有一個看起來像這樣的數據:如何系統與R數據幀之前的值替換<NA>行

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. 

它產生此結果:

> 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 

我想要做的是將<NA>個細胞與前述值,產生這樣的:

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 

在上述例子中的第二行具有NA,它必須採取V1和V2列中的值從包含的值前面的行。

我該如何在R中實現?

回答

4

可以使用na.locf功能(包zoo):

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