R语言merge()合并数据集后行数大幅增加的原因咨询
合并Fitbit数据集后行数暴增的原因及解决方法
原因分析
你遇到的是典型的笛卡尔积问题:
- 当仅通过
Id列合并两个数据集时,merge()函数会将第一个数据集中某个Id对应的所有记录,和第二个数据集中同一个Id对应的所有记录进行两两配对。 - 从你的小时级Fitbit数据来看,每个用户(
Id)对应多条不同时间的记录,比如用户123在卡路里数据里有N条记录,在强度数据里也有N条对应时间的记录,仅按Id合并就会生成N*N条该用户的记录,最终整体行数会暴增到两个数据集行数的乘积除以唯一用户数,也就是你看到的15393213行。
解决方案
你需要同时按用户ID+时间进行合并,注意两个数据集的时间列名大小写不同(一个是ActivityHour,一个是Activityhour),需明确指定匹配的列:
calories_merged_data <- merge(hourlyCalories_merged, hourlyIntensities_merged, by.x = c('Id', 'ActivityHour'), by.y = c('Id', 'Activityhour'))
这样合并后,同一个用户同一小时的卡路里和强度数据会正确对应,行数会和原数据集一致(22099行,前提是两个数据集的Id+时间组合完全匹配)。
内容的提问来源于stack exchange,提问作者Madhav Ddas
相关产品推荐
相关产品推荐

