如何将xts对象的一行作为子集命名为向量?

时间:2019-02-12 01:52:43

标签: r subset xts zoo

我无法弄清楚如何从xts对象子集一行,并得到的结果是命名向量。这是一个例子。制作一个玩具xts对象:

x <- c("a","b","c")
z <- as.data.frame(matrix(data = c(1,2,3,4,5,6,7,8,9), nrow = 3))
colnames(z) <- x
z_xts <- xts(z, order.by = as.Date(17897:17899))

以下是示例xts对象z_xts:

           a b c
2019-01-01 1 4 7
2019-01-02 2 5 8
2019-01-03 3 6 9

我想对z_xts第2行的a和b列进行子集化,例如:

sub_z <- z_xts[2, ][1, c("a","b”)]

这给出了:

           a b
2019-01-02 2 5

谁是“ xts”,“ zoo”类。但是,我想要一个数字类的命名向量。我已经尝试了一切,最接近的方法是:

sub_z <- as.numeric(coredata(z_xts[2, ][1, c("a","b")]))

给出:

[1] 2 5

是“数字”类,但丢失了列名。我真正想要的是:

a b 
2 5

一个人怎么做到的?

1 个答案:

答案 0 :(得分:1)

怎么样

cols <- c("a", "b")
v <- setNames(as.numeric(z_xts[2, cols]), cols)
v
#a b
#2 5

v被命名为向量

str(v)
# Named num [1:2] 2 5
# - attr(*, "names")= chr [1:2] "a" "b"