簡體   English   中英

使用 R 對多個不均勻的 data.frame 對象進行統計分析

[英]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.OpenRMO$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對象會定期(有時​​是每天)更新(即添加到每個下載的股票代碼的最后一個值)。

我的問題:

  • 考慮到上述情況,應如何“處理”數據(由於缺乏更好的術語),以便可以對其進行任何類型的統計分析(包括跨 2 個以上的df對象)?
  • 是否應該合並數據?
  • 有最佳實踐嗎?
  • 應該使用什么代碼來進行合並(記住它需要更新)?

提前致謝。


使用的系統:

  • R 版本:4.1.1 (2021-08-10)
  • RStudio 版本:1.4.1717
  • 操作系統:macOS Catalina 版本 10.15.7 和 macOS Big Sur 版本 11.6

您可以計算匹配日期的相關性。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM