reduceleft_join来组合table_base table_a table_b. 方法A可以工作,但必须输入对象名称,有点无聊. 方法B可以获取对象名称,但不能返回正确的结果,如何修复?谢谢!

library(tidyverse)
table_base <- data.frame(cat=c("a","b","c","d"))

table_a <- data.frame(cat=c("a","b"),
                      value=c(1,2))

table_b <- data.frame(cat=c("a","c","d"),
                      value=c(7,9,10))

# method A: ok, but have to input object name one by one in list

reduce(list(table_base,table_a,table_b),left_join,by='cat') 



# method B: can't work
reduce(list(mget(ls(pattern="^table"))),left_join,by='cat')

推荐答案

您需要解决的两个问题

  1. mget已经返回了一个列表,所以你不再需要list()来包装mget
  2. 数据帧在列表中的顺序很重要,如果您想要获得相同的结果,则需要调整迭代left_join的数据帧顺序

Code (Example only)

> reduce(mget(ls(pattern = "^table")[c(3, 1, 2)]), left_join, by = "cat")
  cat value.x value.y
1   a       1       7
2   b       2      NA
3   c      NA       9
4   d      NA      10

R相关问答推荐

是否有任何解决方案可以优化VSCode中RScript的图形绘制?

按块将载体转换为矩阵-reshape

使用Shiny组合和显示复制和粘贴的数据

混淆矩阵,其中每列和等于1

编码变量a、b、c以匹配来自另一个数据点的变量x

在值和NA的行顺序中寻找中断模式

管道末端运行功能

更改Heatmap Annotation对象的名称

r—绘制相交曲线

RStudio中相关数据的分组箱形图

在for循环中转换rabrame

为什么当用osmdata映射R时会得到相邻状态?

使用data.table::fcase()而不是dplyr::case_When()时保持值

如何提取所有完美匹配的10个核苷酸在一个成对的匹配与生物字符串在R?>

我如何使用tidyselect来传递一个符号数组,比如Pivot_Long?

如何筛选截止年份之前最后一个测量年度的所有观测值以及截止年份之后所有年份的所有观测值

是否可以将线性模型的p值添加到tbl_summary中

根据r中每行中的日期序列,使用列名序列创建新列

通过匹配另一个表(查找表)中的列值来填充数据表,并在另一个变量上进行内插

用LOOCV进行K近邻问题