【发布时间】:2018-01-09 02:08:53
【问题描述】:
我有两个非常大的数据框(5000 万和 150 万),其中的一些变量是相同的。我需要比较两者并在一个数据框中添加另一列,以计算另一个数据框中的匹配观察值。
例如:DF1 和 DF2 都包含 id、date、age_grp 和性别变量。我想在 DF1 中添加另一列(match_count),显示 DF1.id = DF2.id 和 DF1.date = DF2.date 和 DF1.age_grp = DF2.age_grp 和 DF1.gender = DF2.gender 的计数 注意
DF1
id date age_grp gender val
101 20140110 1 1 666
102 20150310 2 2 777
103 20160901 3 1 444
104 20160903 4 1 555
105 20010910 5 1 888
DF2
id date age_grp gender state
101 20140110 1 1 10
101 20140110 1 1 12
101 20140110 1 2 22
102 20150310 2 2 33
在上面的示例中,组合“id = 101, date = 20140110, age_grp = 1, gender = 1”在 DF2 中出现了两次,因此计数为 2 和组合“id = 102, date = 20150010, age_grp = 2 , gender = 2" 出现一次,因此计数为 1。
下面是我正在寻找的结果数据框
结果
id date age_grp gender val match_count
101 20140110 1 1 666 2
102 20150310 2 2 777 1
103 20160901 3 1 444 0
104 20160903 4 1 555 0
105 20010910 5 1 888 0
这是我目前正在做的事情,它适用于小数据,但不适用于大数据。对于这种情况,即使在几个小时后它也没有返回任何结果。
注意:我已经通过this 线程,它没有解决规模问题
with(DF1
, mapply(
function(arg_id,arg_agegrp, arg_gender, arg_date){
sum(arg_id == DF2$id
& agegrp == DF2$agegrp
& gender_bool == DF2$gender
& arg_date == DF2$date)
},
id, agegrp, gender, date)
)
更新
Id 列不是唯一的,因此可能有两个观察值,其中 id、date、agegrp 和 sex 可能相同,只有 val 列可能不同。
【问题讨论】:
标签: r dataframe count aggregate