【问题标题】:Remove row names from a list of dataframes?从数据框列表中删除行名?
【发布时间】:2018-10-14 12:37:32
【问题描述】:

我的代码:

library(quantmod)
library(tseries)
library(ggplot2)
companies = c("IOC.BO", "BPCL.BO", "ONGC.BO", "HINDPETRO.BO", "GAIL.BO")
stocks = list()
for(i in 1:5){
 stocks[[i]] = getSymbols(companies[i], auto.assign = FALSE)
}

stocks 是数据帧列表。现在我正在尝试将所有 $adjusted 列绑定到存储在stock 中的所有数据帧,但为此我需要删除行名(请告诉我是否有更好的方法来执行此操作):

for(i in 1:5)
 rownames(stocks[[i]])<- NULL

但是生成的数据框仍然有它们的行名,有人可以告诉我哪里出错了吗?

附:此外,我的最终目标是在列表stocks 中创建一个数据框,其中仅包含调整后的数据框列:

adjusted=data.frame()
for(i in 1:5)
  coln=stocks[[1]][,6]
  adjusted=cbind(ajusted,coln)
adjusted

但这会返回调整为列表。

【问题讨论】:

  • 你的最后一个循环不依赖于循环控制变量i,它只是重复相同的2个语句5次。

标签: r dataframe quantmod


【解决方案1】:

行名

关于运行问题中的代码后的行名

rownames(stocks[[1]])
## NULL

所以股票后面有行名是不正确的。

调整后的系列

要创建调整值的时间序列,请使用Ad,如下所示。

Adjusted <- do.call("merge", lapply(stocks, Ad))

把它们放在一起

请注意,我们实际上并不需要处理整个行名,以下内容就足够了。倒数第二行是可选的,因为它的唯一目的是使列名更好,最后一行将 xts 对象 Adjusted 转换为数据框,并且可能不需要,因为您可能会发现使用 xts 对象比使用 xts 对象更方便使用数据框。

library(quantmod)
library(ggplot2)

stocks <- lapply(companies, getSymbols, auto.assign = FALSE)
Adjusted <- do.call("merge", lapply(stocks, Ad))
names(Adjusted) <- sub(".BO.Adjusted", "", names(Adjusted))
adjustedDF <- fortify(Adjusted)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2013-01-17
    • 2021-11-06
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多