【发布时间】:2016-11-01 10:51:44
【问题描述】:
我在计算药物组合的数量时遇到了问题。我的数据组织在两个数据框中。 df1 包含 id 和 found 的药物,例如:
ID | drug
-----------
1 | drug1
1 | drug2
1 | drug3
2 | drug3
2 | drug5
3 | drug1
3 | drug3
3 | drug4
3 | drug5
df2 显示了 2 种不同药物的所有可能药物组合,如下所示:
combi1 | combi2
-----------------
drug1 | drug2
drug1 | drug3
drug1 | drug4
drug2 | drug3
drug2 | drug4
drug2 | drug5
总共有 7140 种可能的组合。我想要的是找出有多少个ID组合drug1-drug2,drug1-drug3等等。
我一直在尝试双 for 循环:
counter=0
for(com in 1:nrow(df2)){
for(id in 1:unique(df1$ID)){
if(df2$combi1[com] %in% df1$drug[id] & df2$combi2[com] %in% df1$drug[id]) {
counter=counter+1
}
}
df2$count=counter
counter=0
}
但它不起作用,因为它一次只能检查一行。我也尝试过Find Most Frequent Combination within a Vector by Group 中的解决方案,但没有任何运气。
此外,我需要对三种药物的组合做同样的事情
编辑: 我喜欢 df2 中的输出是这样的,在那里我可以看到 drug1 和 drug2 在 ID 中作为组合出现了多少次。例如,只有一个 ID 同时具有 drug1 和 drug2,而 2 个 ID 具有 drug1 和 drug3
combi1 | combi2 | count
-----------------------
drug1 | drug2 | 1
drug1 | drug3 | 2
drug1 | drug4 | 0
drug2 | drug3 | 1
drug2 | drug4 | 0
drug2 | drug5 | 0
【问题讨论】:
-
见this similar post;
cbind(df2, n = crossprod(table(df1))[as.matrix(df2)])
标签: r combinations