如何系统地替换<;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