【发布时间】:2019-02-24 05:34:57
【问题描述】:
是否可以使用data.tables 一个接一个地链接多个合并操作?
该功能类似于在dplyr 管道中加入多个 data.frames,但将用于data.tables,其链接方式类似于在下面合并两个data.tables,然后操作data.table按要求。但是只有你才能合并另一个data.table。我承认this SO question here 可能非常相似,那是在@chinsoon12 发表评论之后。
感谢您的帮助!
library(dplyr)
library(data.table)
# data.frame
df1 = data.frame(food = c("apples", "bananas", "carrots", "dates"),
quantity = c(1:4))
df2 = data.frame(food = c("apples", "bananas", "carrots", "dates"),
status = c("good", "bad", "rotten", "raw"))
df3 = data.frame(food = c("apples", "bananas", "carrots", "dates"),
rank = c("okay", "good", "better", "best"))
df4 = left_join(df1,
df2,
by = "food") %>%
mutate(new_col = NA) %>% # this is just to hold a position of mutation in the data.frame
left_join(.,
df3,
by = "food")
# data.table
dt1 = data.table(food = c("apples", "bananas", "carrots", "dates"),
quantity = c(1:4))
dt2 = data.table(food = c("apples", "bananas", "carrots", "dates"),
status = c("good", "bad", "rotten", "raw"))
dt3 = data.table(food = c("apples", "bananas", "carrots", "dates"),
rank = c("okay", "good", "better", "best"))
# this is what I am not sure how to implement
dt4 = merge(dt1,
dt2,
by = "food")[
food == "apples"](merge(dt4))
【问题讨论】:
-
你可以搜索
Reduce(function(x, y) merge(x, y), list(dt2,dt3,dt4)) -
您可能需要举一个更具体的例子。指导在这里,如果您有兴趣:stackoverflow.com/questions/5963269/… 只要逗号和括号平衡且在正确的位置,您在第二块中的伪代码对我来说看起来不错。
-
你说得对,我认为这是一个更笼统的问题,但提供 MWE 会更容易。让我编辑提供一个。
标签: r merge data.table