gpt4 book ai didi

r - 按因子将行数据移动到 R 中的列中

转载 作者:行者123 更新时间:2023-12-01 08:06:12 25 4
gpt4 key购买 nike

我有一个数据集如下:

    > head(data)

Symbol Date Close
1 A 2009-01-01 15.63
2 AA 2009-01-01 11.26
3 AAP 2009-01-01 33.65
4 AAV 2009-01-01 4.21
5 AB 2009-01-01 20.79
6 ABB 2009-01-01 15.01

data$Symbol 中大约有 2500 个唯一值。我需要将其转换为如下内容,其中日期位于左侧,但每个符号都有其单独的列。请注意,某些符号会有一些没有数据的日期。

  Date         A     AA     AAP    AAV.....
1 2009-01-01 15.63 11.26 33.65 4.21...
2 2009-01-02 15.26 11.25 33.62 3.88
3 2009-01-03 16.23 11.05 34.63 4.05
4 2009-01-04 16.21 11.72 35.19 4.35
...and so on

我尝试了很多方法,最终决定使用 split 函数将每个数据移动到一个单独的数据帧中,然后将每个数据转换为一个 xts 对象,然后我将使用 xts merge 函数。我面临的问题是我试图使用字符串作为变量名,但它不起作用,尽管我尝试了 get、assign,但我得到的只是一个错误。我的代码如下:

t1 <- unique(data$Symbol)
head(t1)

blocks <- split(data,data$Symbol)

for (i in 1:length(t1) ) {
symb= t1[i]
zclose <-paste("blocks$",symb,"$Close",sep="")
zdate <- paste("blocks$",symb,"$Date",sep="")
assign(paste("DataFor",symb,sep=""), xts(zclose,zdate))
}

最后一部分错误为“Error in xts(zclose, zdate) : order.by 需要一个适当的基于时间的对象”。

如果我对名称进行硬编码,它会起作用,例如 blocks$AA$Close 和 blocks$AA$Date;但如果这些变量名分别作为字符串包含在 zclose 和 zdate 中则不会。

非常感谢您到目前为止的阅读。我是 R 的新手,非常感谢任何指点。

最佳答案

您可以使用reshape2 包将您的数据从长格式转换为宽格式。然后转换成xts

require(reshape2)
require(xts)

data
## Date Symbol Close
## 1 2009-01-01 A 15.63
## 2 2009-01-02 A 15.26
## 3 2009-01-03 A 16.23
## 4 2009-01-04 A 16.21
## 5 2009-01-01 AA 11.26
## 6 2009-01-02 AA 11.25
## 7 2009-01-03 AA 11.05
## 8 2009-01-04 AA 11.72
## 9 2009-01-01 AAP 33.65
## 10 2009-01-02 AAP 33.62
## 11 2009-01-03 AAP 34.63
## 12 2009-01-04 AAP 35.19
## 13 2009-01-01 AAV 4.21
## 14 2009-01-02 AAV 3.88
## 15 2009-01-03 AAV 4.05
## 16 2009-01-04 AAV 4.35


tmp <- dcast(data = data, formula = Date ~ Symbol)
Using Close as value column: use value.var to override.

RES <- xts(x = tmp[, -1], order.by = as.Date(tmp[, 1]))

RES
## A AA AAP AAV
## 2009-01-01 15.63 11.26 33.65 4.21
## 2009-01-02 15.26 11.25 33.62 3.88
## 2009-01-03 16.23 11.05 34.63 4.05
## 2009-01-04 16.21 11.72 35.19 4.35


str(RES)
## An ‘xts’ object on 2009-01-01/2009-01-04 containing:
## Data: num [1:4, 1:4] 15.6 15.3 16.2 16.2 11.3 ...
## - attr(*, "dimnames")=List of 2
## ..$ : NULL
## ..$ : chr [1:4] "A" "AA" "AAP" "AAV"
## Indexed by objects of class: [Date] TZ: UTC
## xts Attributes:
## NULL

关于r - 按因子将行数据移动到 R 中的列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23728611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com