我想合并具有ID变量的6个数据集。我希望有一个数据集,其ID值对所有数据集都是通用的。
我知道这是一个简单的解决方案,但我没有遇到过帮助主题
离。
id month sbp dpb
D1 3 40 40
D1 4 10 10
D1 3 20 20
D2 4 30 20
D3 5 10 40
D1 3 40 40
id month sbp dpb
D1 3 40 40
D1 4 10 10
D2 3 20 20
D4 4 30 20
D3 5 10 40
D1 3 40 40
最终
id month sbp dpb
D1 3 40 40
D1 4 10 10
D1 3 20 20
D2 4 30 20
D3 5 10 40
D1 3 40 40
D1 3 40 40
D1 4 10 10
D2 3 20 20
D3 5 10 40
D1 3 40 40
最终数据集中省略了D4
答案 0 :(得分:0)
由于我们有6个数据集(假设对象是'df1','df2',...'df6'),请使用list
在mget
中获取它们的值,然后将它们绑定在一起(bind_rows
)和filter
,将'id'列在所有这些中并不常见的
library(dplyr)
n <- 2 #Based on the example only two objects, change it to 6
mget(paste0("df", seq_len(n))) %>%
bind_rows(., .id = 'grp') %>%
group_by(id) %>%
filter(n_distinct(grp)==n) %>%
ungroup %>%
select(-grp)
# A tibble: 11 x 4
# id month sbp dpb
# <chr> <int> <int> <int>
# 1 D1 3 40 40
# 2 D1 4 10 10
# 3 D1 3 20 20
# 4 D2 4 30 20
# 5 D3 5 10 40
# 6 D1 3 40 40
# 7 D1 3 40 40
# 8 D1 4 10 10
# 9 D2 3 20 20
#10 D3 5 10 40
#11 D1 3 40 40
base R
选项是获取intersect
lst <- setNames(mget(paste0("df", seq_len(n))), NULL)
ids <- Reduce(intersect, lapply(lst, `[[`, 'id'))
res <- do.call(rbind, lapply(lst, subset, subset = id %in% ids))
row.names(res) <- NULL
res
# id month sbp dpb
#1 D1 3 40 40
#2 D1 4 10 10
#3 D1 3 20 20
#4 D2 4 30 20
#5 D3 5 10 40
#6 D1 3 40 40
#7 D1 3 40 40
#8 D1 4 10 10
#9 D2 3 20 20
#10 D3 5 10 40
#11 D1 3 40 40
答案 1 :(得分:0)
这是你在找什么?请参阅以下代码:
df3 <- subset(df2, df2$id %in% df1$id)
df <- rbind(df2, df3)