从R中的两列计算精度,创建汇总表

从R中的两列计算精度,创建汇总表,r,dataframe,R,Dataframe,注意:这方面我还不太熟悉。 我在R中有一个数据帧df 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 显示由类pop标记的唯一个体、它们在当前中实际属于的类以及它们通过算法放置到的类 我想要的是对准确度的总结,包括课堂和整体。在上面的例子中,我想要的是: POP CORRECT ACC

注意:这方面我还不太熟悉。 我在R中有一个数据帧df

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
显示由类pop标记的唯一个体、它们在当前中实际属于的类以及它们通过算法放置到的类

我想要的是对准确度的总结,包括课堂和整体。在上面的例子中,我想要的是:

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

我想我可以指定行来找到每个类的准确度,但我不确定如何将其强制到汇总表中,或者我是否在正确的轨道上

您需要一个分组变量

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

首先,在组变量1、2、3中,将组变量与个人变量分开存储在这里始终是一个好主意,这使得聚合更容易。在这里,您可以使用类似cbindo.callrbind、strsplitas.characterdf$personals、split=\uUdf这样的东西来实现这一点,但最好从它们分开开始。
> 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