2016-07-13 8 views
1

以下のデータフレームでは、複数の列に対してkolmogorov-smirnovテストを実行します。列IDはレコードID、ADは2つのレベル(それぞれ「その他」およびA、B、C、D)で構成されます。データフレームからの複数の列の統計的テスト

    カラムA(O対A)のためのEの
  • 分布カラムB(O対B)カラムC(O対C)の
  • 分布に対するEの
  • 分布に対するEの
  • 分布E列A(D対O)
実際に

、私は80列を持っているので、私は「同時に」これらの80回のテストを実行するための方法を探しています

ID A B C D E 
1 1 O B C O 1 
2 2 O O O O 3 
3 3 O O O D 2 
4 4 A O C D 7 
5 5 A B O O 12 
6 6 O O O O 4 
7 7 O B O O 8 
+0

あなたが持っているものこれまでに試しましたか?あなたはどこにいらっしゃいますか? – Tensibai

+0

私はKSテストに必要なベクトルを作成することに固執しています。私が見ているように、列A〜Dのそれぞれに対して列Eからの値を含む2つのベクトルが必要です。一度私はそれらを持っている、私はすべての対のベクトルのKSテストを実行したいと思います –

+0

私は、私は言うだろうが、とにかく試して与えることは非常に不安です: 'test [2:5] < - lapply(test [ 2:5]、as.factor); lapply(test [2:5]、ks.test、y = test $ E)あなたは何をしていますか? (テストはあなたの例のデータフレームです) – Tensibai

答えて

3

私は、これはあなたの問題を解決を願って:

dat <- read.table("path/data.txt") # your data imported into my session. 

cols <- c("A", "B", "C", "D") #these are the your columnss with categories. We leave the others out. 
E <- dat$E # but save the E variable 
lapply(cols, function(i){ # Evaluate E at each level of each column 
    x <- factor(dat[,i]) 
    a <- E[x == levels(x)[1]] 
    b <- E[x == levels(x)[2]] 
    ks.test(a, b) 
    }) #you get a list with the results for each column 
+3

なぜ' 1:ncol(dat [、cols]) 'ではなく' cols'でループして、 '1:length(cols) '?... ...次に' x < - dat [、ind] 'と' x == ind'を使うことができます... – Cath

+1

'lapply(cols、function(i){x < - dat [、i]; $ {x == levels(x)[2]]; ks.test(a、b)}) 'は以下のようになります:a < - dat $ E [x == levels(x)[1]];確かに仕事。 – Tensibai

+0

true、簡略化することができます –

関連する問題