相关疑难解决方法(0)

使用data.table进行左连接

假设我有两个data.table:

A:

  A  B
1: 1 12
2: 2 13
3: 3 14
4: 4 15
Run Code Online (Sandbox Code Playgroud)

B:

   A  B
1: 2 13
2: 3 14
Run Code Online (Sandbox Code Playgroud)

我有以下代码:

merge_test = merge(dataA, dataB, by="A", all.data=TRUE)
Run Code Online (Sandbox Code Playgroud)

我明白了:

   A B.x B.y
1: 2  13  13
2: 3  14  14
Run Code Online (Sandbox Code Playgroud)

但是,我想在最终合并表中的dataA中的所有行.有没有办法做到这一点?

merge r data.table

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

左边连接(一列)的首选data.table语法

我该如何开始考虑我更喜欢哪种语法?

我的标准是效率(这是第一)以及可读性/可维护性.

这个

A <- B[A, on = .(id)] # wow such. concision
Run Code Online (Sandbox Code Playgroud)

或者那个

A[B, on = .(id), comment := i.comment]
Run Code Online (Sandbox Code Playgroud)

甚至(正如PoGibas所说):

A <- merge(A, B, all.x = TRUE)
Run Code Online (Sandbox Code Playgroud)

为了完整性,一个更基本的方法是使用match():

A[, comment := B[chmatch(A[["id"]], id), comment]]
Run Code Online (Sandbox Code Playgroud)

示例数据:

library(data.table)
A <- data.table(id = letters[1:10], amount = rnorm(10)^2)
B <- data.table(id = c("c", "d", "e"), comment = c("big", "slow", "nice"))
Run Code Online (Sandbox Code Playgroud)

r data.table

7
推荐指数
1
解决办法
655
查看次数

标签 统计

data.table ×2

r ×2

merge ×1