【问题标题】:Using index in df name在 df 名称中使用索引
【发布时间】:2017-04-02 12:48:31
【问题描述】:

我正在尝试在两列的交叉点上合并 10 个数据框。我需要它来返回 25 个数据帧。

我有五个股票投资组合 ME_1、ME_2、...、ME_5,同样还有 5 个投资组合 BM_1、BM_2、...、BM_5。

R 不会将 BM_[i] 识别为例如BM_1

for(i in 1:5) {
    for(j in 1:5) {
            pf <- paste("bm_", i, "me_", j, sep ="")
            assign(pf, merge(x=BM_[i], y=ME_[j], by = c("date", "tick")))

            pf <- pf %>%
                    arrange(tick, date) %>%
                    group_by(date_year.x) %>%
                    mutate(W = MVE_jun/sum(MVE_jun))
    }
}

我收到以下错误:

Error in merge(x = BM_[i], y = ME_[j], by = c("date", "tick")) : 
  object 'BM_' not found

【问题讨论】:

    标签: r for-loop merge


    【解决方案1】:

    原因是没有BM_ 数据集。我们需要BM_1 BM_2 而不是使用不存在的对象对列进行子集化,使用paste 将获取字符对象名称,然后使用get,我们提取存储在该对象中的值

    for(i in 1:5) {
       for(j in 1:5) {
            pf <- paste("bm_", i, "me_", j, sep ="")
            assign(pf, merge(x=get(paste0("BM_", i)),
                   y=get(paste0("ME_", j)), by = c("date", "tick")))
    
            pf <- pf %>%
                    arrange(tick, date) %>%
                    group_by(date_year.x) %>%
                    mutate(W = MVE_jun/sum(MVE_jun))
      }
    }
    

    注意:如 cmets 中所述,paste 是矢量化的,因此无需多次调用paste

    【讨论】:

    • 谢谢,这似乎适用于第一部分并执行了正确的合并,但现在代码的最后一部分将不起作用。我玩弄了它,但我无法弄清楚我在循环中在 dplyr 中使用 pf 的方式是否有问题?我在 UseMethod("arrange_") 中收到错误错误:没有适用于 'arrange_' 的方法应用于“字符”类的对象
    • @claushojmark 你需要提供一个可重复的小例子,并在你的帖子中更新它以供其他人测试
    猜你喜欢
    • 2019-07-21
    • 2016-08-20
    • 2015-04-11
    • 2017-02-06
    • 1970-01-01
    • 2021-10-10
    • 2018-03-08
    • 1970-01-01
    • 2019-07-10
    相关资源
    最近更新 更多