我有一个看起来像这样的表(请注意,相同的ID行分为三个不同的行,因为没有空间):
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 :(得分: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)