2016-12-04 70 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)