2016-12-04 3 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

Пожалуйста отображение входов в вопросах к SO воспроизводимой формы, так что любой желающий может просто скопировать и вставить его в свою сессию. Также примеры должны быть минимальными, поэтому их нужно сократить до меньшего количества столбцов, пока еще показывая проблему. См. [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) 
Смежные вопросы