2016-12-04 69 views
0

我有一个表看起来像这样的表(注意,同一ID行去三个不同的行,因为没有足够多的空间):删除NA的距离,使用R

ID INVENT_KPV KASVUKOHA_KOOD RINDE_KOOD PUULIIGI_KOOD VANUS AASTA 
7900249 2002.12.01    MD   1   KS 60 1942 
8200249 2002.12.01    AN   1   KS 50 1952 
8300249 2002.12.01    AN   NA   NA NA NA 
KORGUS TAGAVARA OSAKAAL RINDE_KOOD PUULIIGI_KOOD VANUS AASTA KORGUS TAGAVARA 
    15  17  30   1   KS 35 1967  11  39 
    20  76  40   1   LV 45 1957  18  115 
    NA  NA  NA   NA   NA NA NA  NA  NA 
OSAKAAL RINDE_KOOD PUULIIGI_KOOD VANUS AASTA KORGUS TAGAVARA OSAKAAL 
    70   NA   NA NA NA  NA  NA  NA 
    60   NA   NA NA NA  NA  NA  NA 
    NA   J   KU 25 1977  3  0  100 

而且我想它如下所示:

ID  INVENT_KPV KASVUKOHA_KOOD RINDE_KOOD PUULIIGI_KOOD VANUS AASTA 
7900249 2002.12.01    MD   1   KS 60 1942 
8200249 2002.12.01    AN   1   KS 50 1952 
8300249 2002.12.01    AN   J   KU 25 1977 
KORGUS TAGAVARA OSAKAAL RINDE_KOOD PUULIIGI_KOOD VANUS AASTA KORGUS TAGAVARA 
    15  17  30   1   KS 35 1967  11  39 
    20  76  40   1   LV 45 1957  18  115 
    3  0  100   
OSAKAAL RINDE_KOOD PUULIIGI_KOOD VANUS AASTA KORGUS TAGAVARA OSAKAAL 
    70   
    60   

因此,NA不见了,某些行比其他行更短(例如ID = 8300249)。

+0

请显示的问题输入所以在重现的形式,使得任何人都可以复制并粘贴到自己的会话。此外,示例应该尽可能少,以便在减少问题的同时减少列数。见[mcve]。这次我在回答结尾处的注释中为你做了这件事。 –

回答

1

1)如果您尝试将字符串(包括空字符串)与数字混合在一起,整列将变成字符或因素,从而导致结果无用;但是,如果你只是在做这个印刷目的那么这将是罚款,并可以这样进行:

m <- as.matrix(DF) 
as.data.frame(replace(m, is.na(m), "")) 

捐赠:

 ID INVENT_KPV KASVUKOHA_KOOD RINDE_KOOD PUULIIGI_KOOD VANUS AASTA 
1 7900249 2002.12.01    MD   1   KS 60 1942 
2 8200249 2002.12.01    AN   1   KS 50 1952 
3 8300249 2002.12.01    AN   

2)另一种方法,如果你真的想较短的行是放弃具有矩形表示的想法并使用如下行的列表:

lapply(split(DF, seq_len(nrow(DF))), function(x) x[, !is.na(x)])       

给出:

$`1` 
     ID INVENT_KPV KASVUKOHA_KOOD RINDE_KOOD PUULIIGI_KOOD VANUS AASTA 
1 7900249 2002.12.01    MD   1   KS 60 1942 

$`2` 
     ID INVENT_KPV KASVUKOHA_KOOD RINDE_KOOD PUULIIGI_KOOD VANUS AASTA 
2 8200249 2002.12.01    AN   1   KS 50 1952 

$`3` 
     ID INVENT_KPV KASVUKOHA_KOOD 
3 8300249 2002.12.01    AN 

注:输入DF在重现的形式是:

Lines <- " ID INVENT_KPV KASVUKOHA_KOOD RINDE_KOOD PUULIIGI_KOOD VANUS AASTA 
7900249 2002.12.01    MD   1   KS 60 1942 
8200249 2002.12.01    AN   1   KS 50 1952 
8300249 2002.12.01    AN   NA   NA NA NA" 
DF <- read.table(text = Lines, header = TRUE)