我有以下数据
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会有一个更简单的解决方案,在这种情况下我无法弄清楚。有人可以试试吗?
编辑:
Detected
和Claimed
列中的因素级别不同。
答案 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( ))