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