如何在不增加行的情况下取消列出 R 和 inner_join 中的对象?

Posted

技术标签:

【中文标题】如何在不增加行的情况下取消列出 R 和 inner_join 中的对象?【英文标题】:How to unlist objects in R and inner_join them without multiplying rows? 【发布时间】:2021-08-12 19:37:40 【问题描述】:

我正在使用 R 和库 quantmod 将数据导入为:

getSymbols("TMUS",from="2020-05-21", src="yahoo",frequency = "daily", format = "%Y-%m-%d") 
getSymbols("AAPL",from="2020-05-21", src="yahoo",frequency = "daily", format = "%Y-%m-%d") 

然后我想取消它们并给它们一个日期列:

TMUS<- as.vector(unlist(TMUS$TMUS.Close)) %>% as_tibble() %>% add_column(date=index(TMUS),.before=1)
AAPL<- as.vector(unlist(AAPL$AAPL.Close)) %>% as_tibble() %>% add_column(date=index(AAPL),.before=1)

最后内部加入它们以创建一个独特的数据库:

data <- TMUS %>%
        inner_join(.,AAPL, by = "date")

问题是内连接增加了行数。我相信原因是TMUSAAPL 都是列表。我尝试使用as.vector(unlist(.)) 取消列出它们,但它们仍然是列表。

有没有办法在不增加行数的情况下获得数据集内连接?

【问题讨论】:

请确认您也在使用zoo 我其实没用zoo,不过估计是quantmod导入的 错字:index(APPL)? 已更正,谢谢! 这里没有list,它们都是"data.frame"(来自getSymbols)或c("tbl_df","tbl","data.frame")(来自您的as.vector(...) 流)。当我运行inner_join 时,我以每行 253 行开始,以总共 253 行结束,我没有看到您的 “乘以行”。 (inner_join 仅适用于 data.frame 类对象,包括小标题,它不适用于向量,因此 unlist(.) 不是可用的方法。) 【参考方案1】:

尝试以下操作(如果您想调整关闭,请使用 Ad 代替 Cl)。 AAPLTMUSboth 将是 xts 对象。如果您只想要两个系列中都有数据的日期,请使用na.omit(both)

library(quantmod)

getSymbols(c("AAPL", "TMUS"))
both <- cbind(Cl(AAPL), Cl(TMUS))

如果您有很多股票,请尝试以下方法:

getSymbols(c("AAPL", "TMUS"), env = e <- new.env())
both <- do.call("cbind", eapply(e, Cl))

【讨论】:

以上是关于如何在不增加行的情况下取消列出 R 和 inner_join 中的对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不取消引用其他数据的情况下取消引用标题?

R:如何在不使用循环的情况下按唯一向量顺序查找所有重复向量值的索引?

如何在不使用命令行的情况下运行 Perl 脚本?

如何在不裁剪或换行的情况下限制列宽?

如何在不缩小r闪亮中的矩阵大小的情况下向输入矩阵添加列?

如何在不导入的情况下从 .dmp 文件中列出 Oracle 中的所有模式和表空间?