我是新手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个。
答案 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