我試圖梳理 2 只不同股票的股息歷史,我有以下代碼:
library(quantmod)
library(tidyr)
AAPL<-round(getDividends("AAPL"),4)
MSFT<-round(getDividends("MSFT"),4)
dividend<-(cbind(AAPL,MSFT))
由于這兩只股票在不同的日期派發股息,所以合并后會有 NA,所以我嘗試使用 tidyr 的 drop_na 函式,如下所示:
drop_na(股息)
#Error in UseMethod("drop_na") : 沒有適用于 'drop_na' 的方法應用于類“c('xts', 'zoo')”的物件
我可以知道我在這里做錯了什么嗎?非常感謝您的幫助。
更新1:
嘗試了 na.omit,它回傳以下內容:
> dividend<-(cbind(AAPL,MSFT))%>%
> na.omit(dividend)%>%
> print(dividend)
[,1] [,2]
uj5u.com熱心網友回復:
我們可以使用na.omit
na.omit(dividend)
drop_na期望 data.frame 作為輸入,而物件dividend不是 data.frame
我們可以強化為 data.frame,然后drop_na在重新排序 NA 后使用
library(dplyr)
library(lubridate)
fortify.zoo(dividend) %>%
group_by(Index = format(ymd(Index), '%Y-%b')) %>%
mutate(across(everything(), ~ .x[order(is.na(.x))])) %>%
ungroup %>%
drop_na()
-輸出
# A tibble: 41 × 3
Index AAPL.div MSFT.div
<chr> <dbl> <dbl>
1 2012-Aug 0.0034 0.2
2 2012-Nov 0.0034 0.23
3 2013-Feb 0.0034 0.23
4 2013-May 0.0039 0.23
5 2013-Aug 0.0039 0.23
6 2013-Nov 0.0039 0.28
7 2014-Feb 0.0039 0.28
8 2014-May 0.0042 0.28
9 2014-Aug 0.0294 0.28
10 2014-Nov 0.0294 0.31
# … with 31 more rows
uj5u.com熱心網友回復:
drop_na僅適用于資料框,但即使您將其轉換為資料框,它也不會提供您想要的。每一行都包含一個 NA 所以drop_na并且na.omit都會洗掉每一行留下零行結果。
而是嘗試在一年/月上進行聚合,這給出了 zoo object both。如果您需要 xts 物件,請使用as.xts(both).
both <- aggregate(dividend, as.yearmon, sum, na.rm = TRUE)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/518230.html
標籤:r数据框呐
