裏 RjpWiki

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

table 関数の使い方が変

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

データセットについてのメモ」の中で,table 関数を使うたびに分析で使う変数と ケースの subset を作っている。

少なくとも,変数の subset を毎回作る必要はない。

また,3次元以上の集計表を第3次元ごとに繰り返している。

で、35歳で層別化して出産回数と人工流産回数を見たい場合は、こんな感じでしょうか?

> table(subset(x,subset=age=="<35",select=c(parity, induced)))
      induced
parity  0  1 more
    1  52 17    0
    >1 40 33   26
> table(subset(x,subset=age!="<35",select=c(parity, induced)))
      induced
parity  0  1 more
    1  24  6    0
    >1 27 12   11

これは,xtabs 関数を使うと,何の苦もなく一発で結果が出る。x は既に作成されているデータフレーム。

> xtabs(~parity+induced+age, x)
, , age = <35

      induced
parity  0  1 more
    1  52 17    0
    >1 40 33   26

, , age = >=35

      induced
parity  0  1 more
    1  24  6    0
    >1 27 12   11

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

データフレームの 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でシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村