我有两个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
答案 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
。