gpt4 book ai didi

r - 如何根据时间序列的列值提取日期?

转载 作者:行者123 更新时间:2023-12-04 12:19:59 25 4
gpt4 key购买 nike

假设我有:

A <- c(1,0,0,0)
B <- c(0,1,0,0)
C <- c(0,0,1,0)
D <- c(0,0,0,1)
data <- xts(cbind(A,B,C,D),order.by = as.Date(1:4))

然后我得到...

           A B C D
1970-01-02 1 0 0 0
1970-01-03 0 1 0 0
1970-01-04 0 0 1 0
1970-01-05 0 0 0 1

我想提取值为 1 的每一列的日期。所以我想看到这样的东西......

A "1970-01-02"
B "1970-01-03"
C "1970-01-04"
D "1970-01-05"

这是获取答案的手动方法。所以我基本上想运行一个可以执行此操作的循环...

index(data$A[data$A==1])
index(data$B[data$B==1])
index(data$C[data$C==1])
index(data$D[data$D==1])

最佳答案

如果特定行有多个 1,而您只想为该行返回一次索引,我们可以使用 rowSums 并对 index 进行子集化

zoo::index(data)[rowSums(data == 1) > 0]
#[1] "1970-01-02" "1970-01-03" "1970-01-04" "1970-01-05"

如果我们想要每个 1 的索引值,我们可以使用 whicharr.ind = TRUE

zoo::index(data)[which(data == 1, arr.ind = TRUE)[, 1]]

要同时获取列名和索引,我们可以重用which

中的矩阵
mat <- which(data == 1, arr.ind = TRUE)
data.frame(index = zoo::index(data)[mat[, 1]], column = colnames(data)[mat[,2]])

# index column
#1 1970-01-02 A
#2 1970-01-03 B
#3 1970-01-04 C
#4 1970-01-05 D

关于r - 如何根据时间序列的列值提取日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58720448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com