2016-04-17 3 views
0

私はプログラミングとRについて全く新しいですが、Rなどのより強力な統計プログラムでしか解析できないデータセットを持っていますRの1つの指定されたコントロールグループに対してテストをループする方法は?

私は大規模ではあるがシンプルなデータセットは、私がmann whitney U検定を用いて対照群と比較したい試料、データ構造を以下に示す。

Group, Measurements 
a  0.14534 
cont 0.42574 
d  0.36347 
c  0.14284 
a  0.23593 
d  0.36347 
cont 0.33514 
cont 0.29210 
b  0.36345 
... 

この問題は、テストの性質上、2つのグループのみが指定されている必要があることから生じます。しかし、私は1つ以上のグループを持っているので、うまくいきません。

これは私がこれまで行ってきたことですが、私が入力ファイルに2つのグループがある場合にのみ、それは反復して動作しません。

data1 = read.csv(file.choose(), header=TRUE, stringsAsFactors=FALSE) 
attach(data1) 
testoutput <- wilcox.test(group ~ measurement, mu=0, alt="two.sided", conf.int=TRUE, conf.level=0.95, paired=FALSE, exact=FALSE, correct=TRUE) 
write.table(testoutput$p.value, file="mwUtest.tsv", sep="\t") 

指定したコントロールグループに対してすべてのグループをテストするには、テストを正しく作成してループする方法を教えてください。私はsapply関数やlapply関数がwilcox.testの前に使われていると仮定していますが、どういうわけかわかりません。

この簡単な質問が以前に提出されていたのですが、この特定の問題に関する以前の質問は見つかりませんでした。

+0

が見える - そう=」 '9月を追加した場合、 "'をあなたの '' read.csv'に渡します。ペアワイズwilcoxonテストやkruskal.testが必要な場合は、 'pairwise.wilcox.test'を試してください。 –

+0

ああ、申し訳ありません、私は外出先でそれらの数字を作りました。私は通常、小数点以下の桁を使用します。シートは正しくフォーマットされ、これを反映するために投稿を編集しました。しかし、ありがとう! –

+0

私はあなたがRの新人だと理解していますが、そこにいる誰かからアドバイスを受けました。あなたの環境が乱雑になり、デバッグが困難な奇妙な問題やエラーが発生する可能性があるため、使用する習慣を身につけないでください。 – Heroka

答えて

0

Rでは、同じ問題に対して多くの解決策があります。ここで私はこれを解決する方法です。

まず、私は私のデータを分割し、実験およびコントロールで1と1つのデータフレームを持っているでしょう:

experiments <- dat[dat$group!="cont",] 
controls <- dat[dat$group=="cont",] 

その後、私はグループで私の実験データを分割するだろう、と私のコントロールの測定値と一緒に私のテストにそれを養います。この構造により、テストからより多くの値を抽出することが容易になります。名前の付いたベクトルを返すだけです。テーブルに組み合わせる

result <- lapply(split(experiments, experiments$group),function(x){ 
    mytest = wilcox.test(x$measurement,controls$measurement,mu=0, alt="two.sided", conf.int=TRUE, conf.level=0.95, paired=FALSE, exact=FALSE, correct=TRUE) 
    return(mytest$p.value) 
}) 

が簡単、その後です:

output <- do.call(rbind,result) 

データを使用:あなたは、小数点区切り文字としてコンマを持っているよう

set.seed(123) 
nobs=100 
dat <- data.frame(group=sample(c(LETTERS[1:6],"cont"),nobs,T), 
        measurement=runif(nobs),stringsAsFactors=F) 
+0

素敵な答えをありがとう!あなたのソリューションは、私の問題を解決するために完璧に機能し、まさに私が探していたものでした。テストには空のエントリが好きではなかったが、Rで修正するのは驚くほど簡単だった(同じ問題を抱えている他のR初心者の方はこれがhttp:// stackoverflow .com/questions/4862178/remove-rows-with-nas-in-data-frame)を参照してください。 –

関連する問題