2017-02-23 107 views
0

注:我很新。 我中的R從R中的兩列計算精度,創建彙總表

INDIVIDUALS CURRENT INFERRED 
pop1_1 1 1 
pop1_2 1 1 
pop1_3 1 2 
pop2_1 2 3 
pop2_2 2 2 
pop2_3 2 2 
pop3_1 3 1 
pop3_2 3 2 
pop3_3 3 3 

示出了由類(彈出)標記的獨特的個體,類它們實際上屬於在(CURRENT)和類的數據幀(DF),以將它們放置在由一個算法(INFERRED)。

我想要的是精度的總結,無論是按班級還是整體。因此,與上面的例子中,我喜歡的東西,看起來像:

POP CORRECT ACCURACY 
pop1 2 66.7 
pop2 2 66.7 
pop3 1 33.3 
OVERALL 5 55.6 

到目前爲止,我有這對整個計算:

for (i in 1:ncol(reducedresults)) 
{reducedresults[,i]=as.vector(reducedresults[,i])} 
correct<-ifelse(reducedresults$CURRENT==reducedresults$INFERRED,1,0) 
accuracy<-sum(correct)/length(correct)*100 

我想我可以指定行找到的準確性每個班級,但我不知道如何強制它進入總結表,或者如果我甚至在正確的軌道上。

+1

對於初學者來說,它總是一個好主意來存儲你的組變量(這裏POP)在組變量(1,2,3)中與您的個人分開,這使得聚合更容易。你在這裏用'cbind(do.call(rbind,strsplit(as.character(df $ individual),split =「_」)),df)'這樣做,但最好先與它們分開。 – lmo

回答

1

您需要分組變量

> df$GROUP <- sub('_.*', '', as.character(df$INDIVIDUALS)) 

那麼你可以使用table計算絕對和相對頻率

> tab <- with(df, table(GROUP, CORRECT=CURRENT == INFERRED)) 
> addmargins(tab) 
     CORRECT 
GROUP FALSE TRUE Sum 
    pop1  1 2 3 
    pop2  1 2 3 
    pop3  2 1 3 
    Sum  4 5 9 
> prop.table(tab, margin=1) 
     CORRECT 
GROUP  FALSE  TRUE 
    pop1 0.3333333 0.6666667 
    pop2 0.3333333 0.6666667 
    pop3 0.6666667 0.3333333 
> prop.table(colSums(tab)) 
    FALSE  TRUE 
0.4444444 0.5555556