1

これは奇妙な質問かもしれませんが、

多かれ少なかれ次のようなデータ フレームがあります。

    t1 t2 t3 t4
o1  NA  1  1  1
o2  1  NA NA NA
o3  NA NA 1  1
o4  1  1  NA NA
o5  1  1  1  1

次のように並べ替えたいと思います。

    t1 t2 t3 t4
o3  NA NA 1  1
o1  NA  1  1  1
o5  1  1  1  1
o4  1  1  NA NA
o2  1  NA NA NA

左下隅から右上隅に向かって行くとわかるように、この「トンネル」(パスなど)があります。一番下の行には右側から最も多くの NA が含まれ、真ん中の行には何もありません。上の行は左側に NA がある行です (一番上の行は最も多くの NA を持っています)。

これを行う簡単な(または少なくともそれほど難しくない)方法はありますか?また、データ フレームは比較的大きい (400x3300)。列と行の名前は保持する必要があります。次に、このデータ フレームを取得してヒート マップを作成します。

4

2 に答える 2

2

NA真ん中だけに sがある行がないと仮定します:

DF <- read.table(text="    t1 t2 t3 t4
o1  NA  1  1  1
o2  1  NA NA NA
o3  NA NA 1  1
o4  1  1  NA NA
o5  1  1  1  1", header=TRUE)

DF1 <- DF[is.na(DF$t1),]
DF2 <- DF[rowSums(is.na(DF))==0,]
DF3 <- DF[is.na(DF$t4),]

DF1 <- DF1[order(-rowSums(is.na(DF1))),]
DF3 <- DF3[order(rowSums(is.na(DF3))),]

DF <- rbind(DF1,DF2,DF3)

#    t1 t2 t3 t4
# o3 NA NA  1  1
# o1 NA  1  1  1
# o5  1  1  1  1
# o4  1  1 NA NA
# o2  1 NA NA NA
于 2013-06-04T07:02:42.300 に答える