相关疑难解决方法(0)

如何加入(合并)数据框(内部,外部,左侧,右侧)?

给出两个数据框:

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
Run Code Online (Sandbox Code Playgroud)

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

  • 一个内连接df1df2:
    只返回行中左表在右表匹配的密钥.
  • 一个外连接df1df2:
    返回两个表中的所有行,从有右表中的匹配键左连接记录.
  • 甲 …

merge join r dataframe r-faq

1155
推荐指数
13
解决办法
108万
查看次数

为什么X [Y]连接data.tables不允许完全外连接或左连接?

这是关于data.table连接语法的一个哲学问题.我发现data.tables的用途越来越多,但仍在学习......

X[Y]data.tables 的连接格式非常简洁,方便和高效,但据我所知,它只支持内连接和右外连接.要获得左外部或全外部连接,我需要使用merge:

  • X[Y, nomatch = NA] - Y中的所有行 - 右外连接(默认)
  • X[Y, nomatch = 0] - 只有在X和Y中都匹配的行 - 内连接
  • merge(X, Y, all = TRUE) - 来自X和Y的所有行 - 完全外部连接
  • merge(X, Y, all.x = TRUE) - X中的所有行 - 左外连接

在我看来,如果X[Y]连接格式支持所有4种类型的连接,那将会很方便.有没有理由只支持两种类型的连接?

对我来说,nomatch = 0nomatch = NA参数值对于正在执行的操作不是非常直观.这是我更容易理解和记忆的merge语法:all = TRUE,all.x = TRUEall.y = TRUE.由于X[Y]操作类似于merge远远不止match,为什么不使用merge的连接,而不是语法match功能的nomatch参数?

以下是4种连接类型的代码示例:

# …
Run Code Online (Sandbox Code Playgroud)

join r data.table

115
推荐指数
3
解决办法
3万
查看次数

标签 统计

join ×2

r ×2

data.table ×1

dataframe ×1

merge ×1

r-faq ×1