[英]How to separate a xts data by dates from a list of xts objects and create a list?
[英]How to use data from two XTS to create a new XTS?
假設我有以下兩個 XTS ......
a <- c(1,2,3,4)
b <- c(2,4,6,8)
x <- xts(cbind(a,b),order.by = as.Date(c("2015-01-02","2015-01-05","2015-01-06","2015-01-07")))
x
和
c <- c("a","b","b","a","a","b")
d <- c(10,20,10,30,20,40)
y <- xts(cbind(c,d),order.by = as.Date(c("2015-01-02","2015-01-02","2015-01-05","2015-01-06","2015-01-07","2015-01-07")))
y
這些給我...
a b
2015-01-02 1 2
2015-01-05 2 4
2015-01-06 3 6
2015-01-07 4 8
和
c d
2015-01-02 "a" "10"
2015-01-02 "b" "20"
2015-01-05 "b" "10"
2015-01-06 "a" "30"
2015-01-07 "a" "20"
2015-01-07 "b" "40"
我想獲得以下 XTS ......
a b
2015-01-02 10 20
2015-01-05 NA 10
2015-01-06 30 NA
2015-01-07 20 40
我嘗試了幾種不同的方法,例如使用函數 match 和 coredata,但無法得到確切的答案。 我認為也許從第一個 XTS 的空白值開始,然后用第二個 XTS 的值填充它會效果最好。 不知道該怎么做。
問題是xts
object 也是一個matrix
is.matrix(x)
#[1] TRUE
根據?matrix
as.matrix 是一個通用的 function。 如果只有原子列和任何非(數字/邏輯/復雜)列,則數據幀的方法將返回字符矩陣,將 as.vector 應用於因子並將格式應用於其他非字符列。 否則,將使用通常的強制層次結構(logical < integer < double < complex),例如,所有邏輯數據幀將被強制轉換為邏輯矩陣,混合邏輯整數將給出 integer 矩陣等。
並且matrix
只能容納單個 class。 如果有單個character
元素,它將整個數據集更改為character
class
這看起來像是y
object 的重塑。 如果將其轉換為 dataframe,則使用 dataframe 進行整形/預處理,然后將其轉換回xts
object,這將很簡單。
library(tidyverse)
library(xts)
data.frame(y) %>%
rownames_to_column('date') %>%
mutate(date = as.Date(date, "X%Y.%m.%d")) %>%
pivot_wider(names_from = c, values_from = d) %>%
#For old tidyr use spread instead of pivot_wider
#spread(c, d) %>%
mutate_at(vars(a, b), ~as.integer(as.character(.))) %>%
column_to_rownames('date') %>%
as.xts
# a b
#2015-01-02 10 20
#2015-01-05 NA 10
#2015-01-06 30 NA
#2015-01-07 20 40
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.