合并两个XTS对象,其中一个与逻辑

时间:2018-09-25 13:16:59

标签: r xts

我有两个XTS对象,它们的尺寸均相同,一个带有逻辑运算符(TRUE / FALSE),另一个带有整数。我试图对整数进行子集处理,以仅显示逻辑运算符XTS对象为TRUE的数据点。

XTS_logical

DATE       Col1      Col2
20170630   TRUE      FALSE
20170731   FALSE     TRUE
20170831   TRUE      TRUE

XTS_integers

DATE       Col1      Col2
20170630    5         6
20170731    2         3
20170831    5         9

XTS所需的结果

DATE       Col1      Col2
20170630    5         NA
20170731    NA        3
20170831    5         9

2 个答案:

答案 0 :(得分:1)

您可以利用xts对象中的数据是矩阵这一事实。因此,您可以使用矩阵计算并将XTS_logical与XTS_integers相乘

XTS_outcome <- XTS_logical * XTS_integers
XTS_outcome 
           Col1 Col2
2017-06-30    5    0
2017-07-31    0    3
2017-08-31    5    9

如果您希望0为NA,则可以执行XTS_outcome[XTS_outcome == 0] <- NA

数据:

XTS_logical <- structure(c(TRUE, FALSE, TRUE, FALSE, TRUE, TRUE), .Dim = 3:2, .Dimnames = list(
    NULL, c("Col1", "Col2")), index = structure(c(1498780800, 
1501459200, 1504137600), tzone = "UTC", tclass = "Date"), class = c("xts", 
"zoo"), .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC")

XTS_integers <- structure(c(5L, 2L, 5L, 6L, 3L, 9L), .Dim = 3:2, .Dimnames = list(
    NULL, c("Col1", "Col2")), index = structure(c(1498780800, 
1501459200, 1504137600), tzone = "UTC", tclass = "Date"), class = c("xts", 
"zoo"), .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC")

答案 1 :(得分:1)

或直接将XTS_logical用作要更改的单元格的索引。

XTS_integers[!XTS_logical] <- NA
#            Col1 Col2
# 2017-06-30    5   NA
# 2017-07-31   NA    3
# 2017-08-31    5    9

这样,原来在0中的所有XTS_integers都不会更改为NA