在 data.table 中的两个不同列中查找相同的值

Looking for same values in two different columns in data.table

我有以下数据

dt<-data.table(id=c(1,1,1,1,1),Claimed=c("i","j","i","j","k"),Detected=c("k","j","i","j","i"))
> dt
   id Claimed Detected
1:  1       i        k
2:  1       j        j
3:  1       i        i
4:  1       j        j
5:  1       k        i

现在,对于 "Claimed" 列中的每个元素,我想检查它在 "Detected" 列中是否相同并获得相似度百分比。因此,理想情况下,上述数据 table.

的输出如下
> dt
   id Claimed   Percentage
1:  1       i           50 
2:  1       j          100
3:  1       k            0

我尝试重塑数据并获取 "Claimed" 中每个唯一元素的所有 "Detected" 变量,如下所示,并计算新 [=19= 中 "Claimed" 变量的出现次数] 列,从而得到百分比。

> dt
   id Claimed Detected_modified
1:  1       i               k,i
2:  1       j               j,j
3:  1       k                 i

但是,我坚信使用 data.table 会有一个更简单的解决方案,在这种情况下我无法弄清楚。有人可以试一试吗?

编辑 :

DetectedClaimed 列中的因子水平不同。

使用dplyr:

library(dplyr)

dt %>% group_by(id, Claimed) %>%
       summarise(percentage = 100 * sum(Claimed == Detected) / n( ))

编辑:如果因因素水平不同而无法比较:

dt %>% group_by(id, Claimed) %>%
       summarise(percentage = 100 * sum(as.character(Claimed) == as.character(Detected)) / n( ))