2017-04-16 9 views
0
d <- data.frame(topic=c("a","a","a","b","c","c"), year=c(2001,2002,2004,2003,2011,2012), 
       I=c(3,2,4,3,0,1), II=c(2,1,2,3,4,0), III=c(0,0,1,2,3,0)) 
library(plyr) 
chip <- ddply(df.agg[,-2], "topic", function(x){ 
    round(fisher.test(x[,-1])$p.value, 3) 
    }) 
#Error in fisher.test(x[, -1]) : 'x' must have at least 2 rows and columns 

どのようにしてfisher.testをddplyにできますか?ある行のトピック(bなど)にはNAという値がありますが、他の行にはpという値があります。ddplyでfisher.testを実行するにはどうすればよいですか?

+0

は、[ - 2] df.agg 'は' 'D 'または'ことになってd [、 - 2] '? – r2evans

+0

はい、間違いをおかけして申し訳ありません。 –

+0

このエラーメッセージではほとんど説明していません。それを動作させるには少なくとも2つの行と列が必要ですが、 'topic'が' b'である行は1つだけです。 – AkselA

答えて

0

あなたはsplitsapplyと塩基Rでこれを行うことができます。

sapply(split(d, d$topic), function(i) 

    if (nrow(i) == 1) { 

    NA 

    } else { 

    round(fisher.test(i[,3:5])$p.value, 3) 

}) 

結果:

a  b  c 
1.000 NA 0.125 
関連する問題