2017-04-16 2 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

오류 메시지가 거의 설명되어 있습니다. 적어도 두 행과 열이 필요하지만'topic'이'b' 인 행은 하나뿐입니다. – 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