R - 如果值A在列A中匹配,那么列B中它们的相应值多久匹配一次?

时间:2014-08-08 13:35:02

标签: r

我是新手R用户,拥有300万行数据集。我使用的是R 3.0.1。我在R中有一个数据框,如下所示:

A1         B1

1          50       
1          50
1          45 
2          20
2          20
3          15
4          30
4          30

我想知道,如果A1中有多个相同的值,相应的值在列B1中匹配的百分比是多少?

在上面的示例中,有7行在A1中是重复的,它们的对应值匹配6/7次。如何获得数百万行的结果?

注意:对于A1中的一组给定值,B列中的唯一值不会超过2个。

1 个答案:

答案 0 :(得分:1)

此处采用data.table方法(假设df是您的数据集)

library(data.table)
df2 <- as.data.table(df)[, list(Match = if(.N > 1) sum(B1[1] == B1),
                                Dups = if(.N > 1) .N), by = A1]

这将创建一个数据集,显示每个A1

的重复项和匹配的频率
df2
##    A1 Match Dups
## 1:  1     2    3
## 2:  2     2    2
## 3:  4     2    2

为了达到您想要的输出,只需执行

df2[, sum(Match)/sum(Dups)]
## [1] 0.8571429