[数据整理]:在R中用dplyr来合并两个数据表

这段时间在清洗自己的三年的横断面数据,需要进行数据的合并连接。发现tidyverse非常不错。

以下是一些很常用的合并方法(备份一下,下次直接复制去用):

####直接合并行/列####
#合并行:在下方堆叠新行,根据列名合并,注意列名要相同,否则会作为新列(用NA填充)
#合并列:在右侧拼接新列,根据位置匹配行,数据框的行数必须相同
#合并行/列在R中分别用dplyr包中的bind_rows()和bind_cols()函数实现
library(dplyr)
bind_rows(
  sample_n(iris, 2), #随机抽取2个样本(行)
  sample_n(iris, 2), 
  sample_n(iris, 2)
)

one = mtcars[1:4, 1:3]
tow = mtcars[1:4, 4:5]
bind_cols(one, tow)


####按照匹配值合并数据框####
#主要包括以下几种情况:
#外连接(左连接、右连接、全连接)、内连接、半连接、反连接;这六种连接对应六个接口一致的函数
left_join(x, y, by)
right_join(x, y, by)
full_join(x, y, by)
inner_join(x, y, by)
semi_join(x, y, by)
anti_join(x, y, by)

#下面用dplyr自带的两个数据集演示
band = band_members
instrument = band_instruments

#左连接:保留x的所有行,合并匹配y中的列
band %>% 
  left_join(instrument, by = "name")

#右连接:保留y的所有行,合并匹配x中的列
band %>% 
  right_join(instrument, by = "name")

#全连接:保留x和y中所有的行,合并匹配列
band %>% 
  full_join(instrument, by = "name")

#内连接:保留两个数据表中共有的观测(行)
band %>% 
  inner_join(instrument, by = "name")

#半连接:保留x表中与y表中的行相匹配的所有行,即根据y表中有匹配的部分来筛选x表中的行
band %>% 
  semi_join(instrument, by = "name")

#反连接:删掉x表中与y表中的行相匹配的所有行,即更具y表中没有匹配的部分筛选x表中的行
band %>% 
  anti_join(instrument, by = "name")


####集合运算####
intersect(x, y) #返回x和y共同包含的观测(行)
union(x, y)     #返回x和y中所有的(唯一)观测
setdiff(x, y)   #返回在x中但不在y中的观测
setequal(x, y)  #判断集合x和y是否相等

详细内容大家可以参考张敬信老师的《R语言编程——基于tidyverse》

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值