在df名称中使用索引

时间:2017-04-02 12:48:31

标签: r for-loop merge

我正在尝试在两列的交集上合并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

1 个答案:

答案 0 :(得分:0)

原因是没有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))
  }
}

注意:正如评论paste中所述,它是矢量化的,因此无需调用paste倍数