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