[英]Carry out statistical analyses across several, uneven, data.frame objects with R
我不確定這是問這種問題的正確地方,但它在這里......
我想對 R 中的數據進行統計分析。但是,這些數據分散在幾個不同大小的data.frame
( df
) 對象中。
所有df
對象都具有相同的結構,例如:
Date PDD.Open PDD.High PDD.Low PDD.Close PDD.Volume PDD.Adjusted
1 2018-07-26 26.50 27.45 25.00 26.70 43213200 26.70
2 2018-07-27 27.54 27.54 23.21 24.60 19923300 24.60
3 2018-07-30 23.31 23.90 21.88 22.50 13967700 22.50
4 2018-07-31 22.20 22.71 19.62 22.59 13709600 22.59
5 2018-08-01 19.38 21.40 18.62 20.31 19339000 20.31
6 2018-08-02 19.27 20.18 19.03 19.66 9268500 19.66
例如,截至今天(2021.10.23) MPNGF
有 734 個觀測值, NKLA
有 850 個, PDD
有 818 個, RMO
648 個。
當我嘗試將PDD$PDD.Open
與RMO$RMO.Open
,我Error in cor(PDD$PDD.Open, RMO$RMO.Open) : incompatible dimensions
收到Error in cor(PDD$PDD.Open, RMO$RMO.Open) : incompatible dimensions
。
下面是一個希望可重現的代碼示例來說明問題:
library(quantmod)
# Load various ticker data
tickers <- c("NKLA", "MPNGF", "PDD", "RMO")
getSymbols.yahoo(tickers, auto.assign = TRUE, env = globalenv(),
from = "2000-01-01")
# Close all Internet connections as a precaution
# https://stackoverflow.com/a/52758758/2950721
closeAllConnections()
# Find xts objects
xtsObjects <- names(which(unlist(eapply(.GlobalEnv, is.xts))))
# Convert xts to data.frame
# https://stackoverflow.com/a/69246047/2950721
for (i in seq_along(xtsObjects)) {
assign(xtsObjects[i], fortify.zoo(get(xtsObjects[i])))
}
# Change name of 1st column to Date of converted xts objects
# https://stackoverflow.com/a/69292036/2950721
for (i in seq_along(xtsObjects)) {
tmp <- get(xtsObjects[i])
colnames(tmp)[colnames(tmp) == "Index"] <- "Date"
assign(xtsObjects[i], tmp)
}
remove(i, tickers, tmp, xtsObjects)
> cor(PDD$PDD.Open, RMO$RMO.Open)
Error in cor(PDD$PDD.Open, RMO$RMO.Open) : incompatible dimensions
其他重要細節:
df
對象的數量增加(即,定期添加新的股票代碼/符號並下載它們的數據)。df
對象會定期(有時是每天)更新(即添加到每個下載的股票代碼的最后一個值)。我的問題:
df
對象)?提前致謝。
使用的系統:
您可以計算匹配日期的相關性。
dis <- as.Date(intersect(PDD$Date, RMO$Date), origin='1970-01-01')
cat('Nobs used\nPDD: ', length(dis)*100/nrow(PDD),
'%, RMO: ', length(dis)*100/nrow(RMO), '%', sep='')
# Nobs used
# PDD: 79.2176%, RMO: 100%
cor(PDD[PDD$Date %in% dis, 'PDD.Open'], RMO[RMO$Date %in% dis, 'RMO.Open'])
# [1] 0.4150031
如果您rbind
數據框,您需要唯一的名稱,並且可能想要添加一個標識觀察的列。
L <- mget(c("MPNGF", "NKLA", "PDD", "RMO")) ## list data.frames
L <- Map(`[<-`, L, 'Name', value=names(L)) ## add 'Name' column
## set unique names
L <- lapply(L, setNames, gsub('.*(?>\\.)', '', names(L[[1]]), perl=TRUE))
DF <- `rownames<-`(do.call(rbind, L), NULL) ## rbind
head(DF)
# Date Open High Low Close Volume Adjusted Name
# 1 2018-11-23 7.0 7.0 7.0 7.0 100 7.0 MPNGF
# 2 2018-11-26 7.0 7.0 7.0 7.0 0 7.0 MPNGF
# 3 2018-11-27 7.0 7.0 7.0 7.0 0 7.0 MPNGF
# 4 2018-11-28 7.0 7.0 7.0 7.0 0 7.0 MPNGF
# 5 2018-11-29 6.5 6.5 6.5 6.5 100 6.5 MPNGF
# 6 2018-11-30 6.5 6.5 6.5 6.5 0 6.5 MPNGF
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.