【发布时间】:2019-10-31 10:00:24
【问题描述】:
我正在尝试合并多个数据框。假设我有以下数据框:
library(tidyverse)
id <- c(10, 10, 12, 12, 13)
data <- c(500, 600, 700, 800, 900)
data1 <- data.frame(id, data)
id <- c(10, 12, 13, 14)
data <- c(550, 850, 950, 1050)
data2 <- data.frame(id, data)
id <- c(15)
data <- c(1350)
data3 <- data.frame(id, data)
现在我想加入数据框,使输出看起来像这样:
> srtdata
id data
1 10 500
2 10 600
6 10 550
3 12 700
4 12 800
7 12 850
5 13 900
8 13 950
9 14 1050
10 15 1350
这就是我这样做的方式。
mdata1 <- dplyr::full_join(data1, data2)
mdata2 <- dplyr::full_join(mdata1, data3)
我必须写两行,因为似乎full_join 可以同时占用两帧x 和y。
为了以正确的方式对数据进行排序,我使用了来自 base R 的 order:
srtdata <- mdata2[order(mdata2$id), ]
有人来帮我找到更好的解决方案吗?
【问题讨论】:
-
明显重复
-
Reduce(function(x, y){merge(x, y, all = TRUE, by = intersect(colnames(x), colnames(y)))}, list(data1, data2,数据3))
标签: r dataframe dplyr data.table