Pre*_*ost 3 merge r data.table
是否可以将多个合并操作一个接一个地链接起来data.tables?
该功能类似于ata.frames在管道中连接多个 d,但以类似的链接方式dplyr使用,如合并下面的两个,然后根据需要进行操作。但只有您才能合并另一个. 我承认这里的这个问题可能非常相似,那是在 @chinsoon12 发表评论之后。data.tablesdata.tablesdata.tabledata.table
谢谢你的帮助!
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))
Run Code Online (Sandbox Code Playgroud)
on可以链接带有参数的多个 data.table 连接。请注意,如果 j 中没有更新运算符(“:=”),这将是右连接,但使用“:=”(即添加列),这将成为左外连接。关于左连接的有用帖子在这里使用 data.table 进行左连接。
使用上面的示例数据以及连接之间的子集的示例:
dt4 <- dt1[dt2, on="food", `:=`(status = i.status)][
food == "apples"][dt3, on="food", rank := i.rank]
##> dt4
## food quantity status rank
##1: apples 1 good okay
Run Code Online (Sandbox Code Playgroud)
在连接之间添加新列的示例
dt4 <- dt1[dt2, on="food", `:=`(status = i.status)][
, new_col := NA][dt3, on="food", rank := i.rank]
##> dt4
## food quantity status new_col rank
##1: apples 1 good NA okay
##2: bananas 2 bad NA good
##3: carrots 3 rotten NA better
##4: dates 4 raw NA best
Run Code Online (Sandbox Code Playgroud)
使用 和 magrittr 管道的示例merge:
dt4 <- merge(dt1, dt2, by = "food") %>%
set( , "new_col", NA) %>%
merge(dt3, by = "food")
##> dt4
## food quantity status new_col rank
##1: apples 1 good NA okay
##2: bananas 2 bad NA good
##3: carrots 3 rotten NA better
##4: dates 4 raw NA best
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2161 次 |
| 最近记录: |