如何连接(合并)数据框(内部,外部,左侧,右侧)


给出两个数据框:


df1 = data.frame(CustomerId = c(1:6), Product = c(rep("Toaster", 3), rep("Radio", 3)))

df2 = data.frame(CustomerId = c(2, 4, 6), State = c(rep("Alabama", 2), rep("Ohio", 1)))


df1

#  CustomerId Product

#           1 Toaster

#           2 Toaster

#           3 Toaster

#           4   Radio

#           5   Radio

#           6   Radio


df2

#  CustomerId   State

#           2 Alabama

#           4 Alabama

#           6    Ohio

我怎样才能做数据库风格,即sql风格,加入?也就是说,我该怎么做:

  • 一个内连接df1df2
    只返回行中左表在右表匹配的密钥。

  • 一个外连接df1df2
    返回两个表中的所有行,从有右表中的匹配键左连接记录。

  • 左外连接(或简称为左加入)df1df2
    左表中返回所有行,并与匹配的右表键任何行。

  • 一个右外连接df1,并df2
    返回右表中的所有行,任何行与左表中匹配的密钥。

额外信用:

如何进行SQL样式选择语句?


12345678_0001
浏览 1031回答 4
4回答

Helenr

内连接有data.table方法,这非常节省时间和内存(对于一些较大的data.frames是必需的):library(data.table)dt1 <- data.table(df1, key = "CustomerId")&nbsp;dt2 <- data.table(df2, key = "CustomerId")joined.dt1.dt.2 <- dt1[dt2]merge也适用于data.tables(因为它是通用的和调用merge.data.table)merge(dt1, dt2)stackoverflow上记录的data.table:如何进行data.table合并操作将外键上的SQL连接转换为R data.table语法为更大的data.frames合并的有效替代方案R&nbsp;如何使用data.table进行基本的左外连接在R?另一种选择是join在plyr包中找到的功能library(plyr)join(df1, df2,&nbsp; &nbsp; &nbsp;type = "inner")#&nbsp; &nbsp;CustomerId Product&nbsp; &nbsp;State# 1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2 Toaster Alabama# 2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4&nbsp; &nbsp;Radio Alabama# 3&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 6&nbsp; &nbsp;Radio&nbsp; &nbsp; Ohio为选项type:inner,left,right,full。From ?join:与merge[ join] 不同,[ ]无论使用何种连接类型,都会保留x的顺序。

鸿蒙传说

你也可以使用Hadley Wickham令人敬畏的dplyr软件包进行连接。library(dplyr)#make sure that CustomerId cols are both type numeric#they ARE not using the provided code in question and dplyr will complaindf1$CustomerId <- as.numeric(df1$CustomerId)df2$CustomerId <- as.numeric(df2$CustomerId)变异连接:使用df2中的匹配将列添加到df1#innerinner_join(df1, df2)#left outerleft_join(df1, df2)#right outerright_join(df1, df2)#alternate right outerleft_join(df2, df1)#full joinfull_join(df1, df2)过滤联接:过滤掉df1中的行,不要修改列semi_join(df1, df2) #keep only observations in df1 that match in df2.anti_join(df1, df2) #drops all observations in df1 that match in df2.
打开App,查看更多内容
随时随地看视频慕课网APP