No.20749 Rで繰り返し解析結果を出力する方法  【赤岳】 2014/01/20(Mon) 18:21

お世話になっております。
自力で何とかしようとしましたが,うまくいきません。どうか教えてください。
Fisherを無数に行いたいのですが,それをうまく表にできません。
対象全例 180 190
a 32 40
b 47 54
c 16 23
d 7 14
e 6 13
f 11 18
g 37 44
h 31 38
というデータがi,j,k・・・と続きます。
次のようにプログラムすると,
> dat<-read.csv("dataA.csv")
> for (i in 1:11){
+ a<-c(dat[i,2], 180-dat[i,2])
+ b<-c(dat[i,3], 190-dat[i,3])
+ p<-fisher.test(data.frame(a,b))
+ Pvalue<-p$p.value
+ print(data.frame(dat[i,],Pvalue))
}
とすると
X D P Pvalue
1 a 32 40 0.4343566
X D P Pvalue
2 b 47 54 0.6418937
X D P Pvalue
3 c 16 23 0.3973988
X D P Pvalue
(省略)
余計な,ラベル(2行以下のX,D,P,Pvalue)がどうしても付いてきてしまいます。
スマートに,
X D P Pvalue
1 a 32 40 0.4343566
2 b 47 54 0.6418937
3 c 16 23 0.3973988
(省略)
というようにするにはどうすればよいのでしょうか。
また,この結果をExcelに落としたいのですが,
> write.table(???, file="clipboard", sep="\t", row.names=FALSE)
???の部分は,どのように記載すればよいのでしょうか。

初歩的な質問で申し訳ございません。

No.20750 Re: Rで繰り返し解析結果を出力する方法  【青木繁伸】 2014/01/20(Mon) 18:47

あなたのプログラムを生かすなら,以下のようにすればよい。
for (i in 1:11) {
a <- c(dat[i, 2], 180 - dat[i, 2])
b <- c(dat[i, 3], 190 - dat[i, 3])
p <- fisher.test(data.frame(a, b))
dat[i, 4] <- p$p.value
# print(data.frame(dat[i,],Pvalue))
}
colnames(dat)[4] <- "Pvalue"
dat
結果は
  X  D  P    Pvalue
1 a 32 40 0.4343566
2 b 47 54 0.6418937
3 c 16 23 0.3973988
4 d 7 14 0.1799453
5 e 6 13 0.1590288
6 f 11 18 0.2508783
:

のようなデータフレームになる

> また,この結果をExcelに落としたいのですが,
> > write.table(???, file="clipboard", sep="\t", row.names=FALSE)
> ???の部分は,どのように記載すればよいのでしょうか。

dat がデータフレームなので,
wite.table(dat, file="エクセルのファイル名", row.names=FALSE)
でしょう?

No.20751 Re: Rで繰り返し解析結果を出力する方法  【赤岳】 2014/01/20(Mon) 19:17

青木先生,
いつもご指導ありがとうございます。
できました!
赤岳

● 「統計学関連なんでもあり」の過去ログ--- 046 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る