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

时间:2015-07-06 15:08:04

标签: r 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"列中是否相同,并获得相似性百分比。因此,理想情况下,我的输出将是以下数据表的输出。

> dt
   id Claimed   Percentage
1:  1       i           50 
2:  1       j          100
3:  1       k            0

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

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

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

编辑

DetectedClaimed列中的因素级别不同。

1 个答案:

答案 0 :(得分:2)

使用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( ))