裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

データフレームの rbind

2012年05月24日 | ブログラミング

data.frameのrbindにはみんな苦労しているようだ」で紹介されている関数

以下のように作ると,コンパクトにまとまった

rbind3 <- function(lst) {
    nr <- sapply(lst, nrow)
    end <- cumsum(nr)
    start <- c(0, end[-length(lst)])+1
    names <- unique(c(sapply(lst, colnames)))
    result <- as.data.frame(matrix(NA, sum(nr), length(names)))
    colnames(result) <- names
    mapply (function(d, s, e) result[s:e, names %in% colnames(d)] <<- d, lst, start, end)
    return(result)
}

実行例

> x <- data.frame(A=1:5, B=5:1, row.names=1:5)
> y <- data.frame(B=1:5, C=5:9, row.names=1:5)
> z <- data.frame(C=3:8, A=8:13, row.names=2:7)
> rbind3(list(x, y, z))
    A  B  C
1   1  5 NA
2   2  4 NA
3   3  3 NA
4   4  2 NA
5   5  1 NA
6  NA  1  5
7  NA  2  6
8  NA  3  7
9  NA  4  8
10 NA  5  9
11  3 NA  8
12  4 NA  9
13  5 NA 10
14  6 NA 11
15  7 NA 12
16  8 NA 13

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ノンパラメトリックとパラメ... | トップ | table 関数の使い方が変 »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事