【问题标题】:Using the merge function in R for multiple values使用 R 中的合并函数处理多个值
【发布时间】:2021-07-19 14:17:48
【问题描述】:

我已经为我的数据计算了多个 RMSE 值,并希望使用 R 中的合并函数将其放入一个表中。 这是我目前拥有的代码:

merge(merge(merge(merge(merge(merge(merge(merge(merge(merge(merge(merge(RMSE_G_te, RMSE_GS_p, by = "name"), 
                                                                                RMSE_GS_sistar, by = "name"), 
                                                                          RMSE_GS_nistar, by = "name"), 
                                                                    RMSE_GS_s, by = "name"), 
                                                              RMSE_GS_t, by = "name"),
                                                        RMSE_GS_d, by = "name"), 
                                            RMSE_GI_p, by = "name"), 
                                      RMSE_GI_sistar, by = "name"), 
                                RMSE_GI_nistar, by = "name"), 
                          RMSE_GI_s, by = "name"), 
                    RMSE_GI_t, by = "name"), 
              RMSE_GI_d, by = "name") 

RMSE 值是使用 Metrics 包中的 rmse() 函数计算得出的。

有没有办法用 for 循环来清理它? 感谢您的帮助,谢谢!

编辑:我尝试将值放入列表中,但出现以下错误:

df <- as.list(RMSE_G_te, RMSE_GS_p, RMSE_GS_sistar, RMSE_GS_nistar, RMSE_GS_s, RMSE_GS_t, RMSE_GS_d, RMSE_GI_p, RMSE_GI_sistar, RMSE_GI_nistar, RMSE_GI_s, RMSE_GI_t, RMSE_GI_d)
reduce(df, merge, by = "name")

fix.by(by.x, x) 中的错误:“by”必须指定唯一有效的列

【问题讨论】:

  • 不要使用 for 循环。使用减少()。如果没有可重现的示例,我无法进行测试,但是如果您将所有数据帧存储在列表中... Reduce(dfList, merge, by = "name")
  • @BillO'Brien 嗨,我得到的错误是“未使用的参数(by = "scientific_name")”
  • 您可以逐字发布产生错误的代码吗?您是否已经将数据框放入列表中?
  • @BillO'Brien 您好,您现在应该可以看到原始帖子中的编辑。谢谢!
  • @Onyambu Reduce 不是语法糖;这是一个高阶函数。合并一组数据帧是 reduce 的经典用例(例如,累积和)。我宁愿使用“减少”单行代码,也不愿使用临时变量、逐一调试错误等。

标签: r merge


【解决方案1】:

您应该首先将所有 data.frames 放在一个列表中:

lst<-mget(ls(pattern='RMSE_G'))

然后调用base R Reduce()purrr:reduce():

library(purrr)
reduce(lst, ~merge(.x, .y, by='name'))

【讨论】:

  • ls 中有一个模式参数。即ls(pattern = 'RMSE_G')
  • 哦,你是对的,我虽然关于那个,但最终没有包括它。更新了答案
  • 不得不对此表示赞同。虽然没有给出可重复的数据,但这似乎解决了问题
猜你喜欢
  • 1970-01-01
  • 2015-01-26
  • 2011-10-29
  • 2018-08-07
  • 1970-01-01
  • 2023-01-18
  • 1970-01-01
  • 2019-01-06
  • 2015-08-25
相关资源
最近更新 更多