2012-04-01 12 views
2

再発問題を解決する最も効率的な手法を知りたいと思います。 、Rバイナリカラム変数に基づいて複数のカラムで複数の関数を実行する

id_code, age, heart_disease, weight, gender, operated, survived, ct_scan, days_hospitalized, 
1332, 43.2, 1,    213, m,  0,  1,  1,  12 
22322, 76.4, 0,    125, f,  1,  0,  0,  45 
995,  55, 1,    199, m,  0,  1,  0,  34 

たとえば、連続変数のテストで実行するために:

私はこのフォーム(T/F変数の0,1)を有するスプレッドシート/ CSV形式で多くのDBを有します生存者対非生存者:

myfx1 <- function(x) {t.test((x), mydat$survived)} 
myfx1(mydat$age) 
myfx1(mydat$weight) 

私は '生き残った'を別の変数に置き換えて繰り返します。

私はplyrdoByを試してみましたが、非生存者、

myfx2 <- function(x) {xtabs(~mydat$survived+x, data=mydat)} 
myfx2(mydat$gender) 
myfx2(mydat$operated) 

対生存者に不測のクロス集計を行うために、多くの例では、平均/分散またはその他の単純な関数を使用して使用方法を示しています。多数の変数を処理する最も簡単で効率的な方法は何ですか?

答えて

1

plyrパッケージには、列単位で機能を実行する素敵な機能があります。

colwise(myfx1)(your_db[,you_numeric_columns]) 

更新:例として、私のために

id_code <- sample(1:1000,500) 
age <- sample(40:80,500, replace=T) 
heart_disease <- sample(0:1,500,replace=T) 
weight <- sample(105:250,500,replace=T) 
operated <- sample(0:1,500,replace=T) 
survived <- sample(0:1,500,replace=T) 
ctscan <- sample(12:45,500,replace=T) 

dat <- data.frame(id_code,age,heart_disease,weight,operated,survived,ctscan) 

fx1 <- function(x) t.test(x, dat$survived)$p.value 

colwise(fx1)(dat[,2:ncol(dat)]) 

作品...。

+0

ありがとうございます - 私はこれと変種(colwiseを見上げた後)を下記のように試しました。何も働かなかった。 1. colwise(myfx1)(mydat [、2]) - > エラー:is.data.frame(df)がTRUEではない 2. colwise(.myfx1、.mydat $ age) - > colwise(.myfx1、.mydat $ age)エラー:オブジェクト '.age'が見つかりません – CLS

+0

3. colwise(.myfx1、mydat $ age) - > function(df、...) { stopifnot(is.data.frame(DF)) DF < - strip_splits(DF) 濾過< - フィルタ(DF) 場合(長さ(濾過)== 0) リターン(data.frame()) df < - quickdf(lapply(filtered、.fun、...)) 名前(df)< - 名前(フィルタリング) DF } <環境:0x1055ab758> 4. colwise(myfx1、mydatの$年齢)3 4 colwise(myfx1)(mydat [年齢])として 同じエラー - > エラー[ 'で.data.frame'(mydat、、age):オブジェクト 'age'が見つかりません。 5. colwise(myfx1)(mydat [、mydat $ age]) - > '[.data.frame'(mydat、 、mydat $ age):未定義の列が選択されました – CLS

+0

6. ddply(mydat、.age、colwise(myfx1)) - > "t.test.default(NEC)でエラーが発生しました。 'observations さらに:警告メッセージ: mean.default(x):argume ntは数値または論理ではありません。戻り値NA " 7. ddply(mydat、、colwise(myfx1、age)) 8. ddply(mydat、、colwise(myfx1、.age)) – CLS

関連する問題