r - 使用辅助 data.frame dplyr R 合并两个 data.frames

标签 r dataframe merge dplyr

我想使用第三个 data.frame matches 来合并两个 data.frame,它提供了如何合并前两个 data.frame 的关键(id number 是匹配的键。Class 应始终匹配,并作为附加检查)。 df2 应合并到 df1,替换具有相同名称的列,并将 df2 中的变量插入到 df1 的相应行中(在这个例子中,这些行将被计分,但在我的真实例子中,大约有 20 多列应该在 30 左右的列中替换(其余 10 列将保持不变)。我希望这是清楚的,并提前非常感谢您的帮助如何有效地做到这一点。 它需要是 left_join 因为我想保留 df1 中的所有记录。 dplyr 是一个偏好!

df1 <- data.frame(1:10,
                  c("a","b","a","b","c","c","b","a","b","c"),
                  seq(20,38,2),
                  dnorm(10,5,2),
                  rnorm(10,78,5))
colnames(df1) <- c("id","class","score","misc","hc")
df2 <- data.frame(11:19,
                  c("g","d","a","e","c","d","f","a","b"),
                  seq(40,48,1),
                  dnorm(9,6,1),
                  rnorm(9,45,3))
colnames(df2) <- c("number","class","score","other","md")

matches <- data.frame(c("b","a","c","a"),
                      c(4,1,5,8),
                      c(19,18,15,13))
colnames(matches) <- c("class","id","number")

library(dplyr)

预期输出:

id class          misc       hc number   score       other       md
 1     a    0.00876415 70.85210     18      47 0.004431848 40.99189
 2     b    0.00876415 81.27802     22      22          NA       NA
 3     a    0.00876415 69.19300     24      24          NA       NA
 4     b    0.00876415 75.86247     19      48 0.004431848 44.78242
 5     c    0.00876415 69.18268     15      44 0.004431848 42.70708
 6     c    0.00876415 80.49475     30      30          NA       NA
 7     b    0.00876415 76.52195     32      32          NA       NA
 8     a    0.00876415 73.52712     13      42 0.004431848 45.69842
 9     b    0.00876415 81.50631     36      36          NA       NA
10     c    0.00876415 80.55145     38      38          NA       NA

最佳答案

使用dplyr

library(dplyr) 
df1 %>% left_join(matches,by=c('id','class'),suffix=c('.df1','.df2')) %>%
        left_join(df2,by=c('class','number'),suffix=c('.df1','.df2')) %>% 
        mutate(score=if_else(!is.na(score.df2),score.df2,score.df1)) %>% 
        select(-score.df1,score.df2)

关于r - 使用辅助 data.frame dplyr R 合并两个 data.frames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52965957/

相关文章:

带有转置开关的 R Shiny 表

python - 如何使用嵌套字典中的子列创建数据框(多索引)?

r - 在 R 中的同一图上绘制不连续的 xts 时间序列?

r - 在 R DT 数据表的 lengthMenu(页面长度菜单)中设置值的名称

r - 如何将 R 矩阵转换为 xts/zoo 对象?

python - 如何在 DataFrame 中执行 If 和 Else If 语句?

svn - SVN分支之间的合并

svn - "The last merge operation tried to add the file ' x.cs' but the file was returned in theworking copy."是什么意思?

R 将矢量内容添加到数据框索引

r - dplyr group_by 中的复杂列选择