2011-10-05 8 views
4

は、ここに私のデータを説明するための小さな例です。Rでは、因子のすべての組み合わせが存在しない場合、「集合体」または「by」の使い方はありますか?

> df <- data.frame(subgroup=rep(paste("s",1:3, sep=""), times=3), 
        feature=c(rep("a",6), rep("b",3)), 
        var=rep(1:3, each=3), 
        data=c(rnorm(3,1), rnorm(3,2), rnorm(3,0))) 
> df 
    subgroup feature var  data 
1  s1  a 1 1.53152620 
2  s2  a 1 1.25476445 
3  s3  a 1 1.04221040 
4  s1  a 2 1.68913400 
5  s2  a 2 1.48290273 
6  s3  a 2 1.62871854 
7  s1  b 3 0.05278296 
8  s2  b 3 -0.66623654 
9  s3  b 3 -1.40006454 

私は私のデータセット内に存在している機能-varの各組み合わせについて、「データ」列の合計を調べたいです。より正確には、私は、合計がそれ以外の場合は3よりも大きく、かつFALSEのときTRUE取得したい:

> result 
    feature snp res 
1  a 1 TRUE 
2  a 2 TRUE 
3  b 3 FALSE 

私は「集約」や「で」を使用してみましたが、彼らは私のニーズに合うことはできません。何か案が?前もって感謝します。

答えて

3

1つの方法は、フィーチャーとvarをグループ化するためにplyrの関数ddplyを使用することです。 summarize関数を使用して、作成したルールに対応する列の新しいdata.frameを作成することができます。中

library(plyr) 
ddply(df, c("feature", "var"), summarize, res = ifelse(sum(data) > 3,TRUE, FALSE)) 

結果:

feature var res 
1  a 1 TRUE 
2  a 2 TRUE 
3  b 3 FALSE 

別の方法は、いくつかのパフォーマンス上の利点を提供することになっているdata.tableを使用することです:

library(data.table) 
dt <- data.table(df) 

dt[, ifelse(sum(data) > 3, TRUE, FALSE), by = c("feature", "var")] 

    feature var V1 
[1,]  a 1 TRUE 
[2,]  a 2 TRUE 
[3,]  b 3 FALSE 
+0

1あなたは私が次の時間を入力し終えるせることができます:Pを –

+0

@brandon - 私は頑張ります、私の謝罪:) – Chase

関連する問題