作者简介
Dwzb , R语言中文社区专栏作者,厦门大学统计专业学生。
知乎专栏:https://zhuanlan.zhihu.com/Data-AnalysisR
前文推送:
由于merge数据在现实应用中使用非常广泛,而且真实的数据远远没有我们练习时使用的数据那么干净,所以有了这篇文章。本文会针对现实数据中可能遇到的一些问题,更深入地讲解merge数据的使用。
数据:自己有针对性地创建,故意踩一些坑并解决
函数:包括dplyr包的join族函数,data.table包的[DT, ]方法,基础及data.table包的merge函数
主要解决如下问题
要合并的两个数据集,合并所依据的列,名称不同
要合并的两个数据集,有一些相同的列名,合并后需要更改防止两列同名
合并所依据的列不是完全相同的,展示多种取舍方法
合并所依据的列中,内容不是唯一的,展示几种情况的处理方法
全文分dplyr包和data.table包来讲
数据创建
先简单说明一下创建的数据
第一组一共四个数据框
data_map 有两列可以用于merge,作为其他数据之间的桥梁,将所有数据merge在一起
data_good 用于merge的列形式很好,和data_map中的列一一对应,用于展示最简单的数据框merge合并。但是为了演示一些参数,在列名上挖了两个坑
data_diff 用于merge的列和data_map中的列有交集,都不完全包括对方,用于展示多种取舍方法在两个包中的 实现
data_bad 用于merge的列有重复,与data_map这个没有重复的数据来merge
第二组两个数据框: bad1和bad2,用于merge的列都有重复,用于展示都有重复时的merge
这里主要展示数据框创建代码,数据框长什么样子,在下面的例子中都会展示
library(dplyr) library(data.table) library(lubridate) # 设置随机种子保证随机试验可以重复 set.seed(1234) # 两列每个值都是唯一的 data_map <- data.table(name_id = letters[1:10], card_id = LETTERS[1:10]) m2 <- sample(letters[1:10], 15, replace = T) m1 <- sample(LETTERS[1:10], 10, replace = F) # object_id列值是唯一的,且正好和data_map的name_id列一一对应 data_good <- data.table(object_id = m1, # 与card_id列对应来合并,故意制造合并列名称不同的情况 name_id = paste(m1, m1, sep='')) # 故意制造同名情况 # name_id列值唯一,与data_map的name_id只有4个重合的 data_diff <- data.table(name_id = sample(letters, 10, replace = F), x1 = c(rep('m',4), rep('n',3), rep('p',3))) # name_id列值不唯一,与data_map的name_id只有7个重合的,但是data_bad中有的在data_map中都能找到 data_bad <- data.table(name_id = m2, # 与name_id对应来合并

本文详细探讨了R语言中数据处理的merge操作,包括dplyr包的join函数和data.table包的合并方法。通过实例展示了如何处理合并过程中遇到的不同列名、重复列等问题,以及静态表和动态表的合并策略。内容涵盖left_join、right_join、inner_join、full_join、semi_join和anti_join等,并对比了data.table中的[DT, ]和merge函数的使用。"
79809898,5642702,深入理解React元素渲染,"['React', 'JSX', '渲染']

2765

被折叠的 条评论
为什么被折叠?



