如何计算R中列向量中的值更改后的行数?
我正在对输出为-1、0或1的金融信号进行分析编码,并尝试跟踪每日分析报告的信号更改后的天数 示例:如果我的df的尾部是0 1 0 0 0 0 最终结果目标是一个向量,如:0 0 1 2 3如何计算R中列向量中的值更改后的行数?,r,R,我正在对输出为-1、0或1的金融信号进行分析编码,并尝试跟踪每日分析报告的信号更改后的天数 示例:如果我的df的尾部是0 1 0 0 0 0 最终结果目标是一个向量,如:0 0 1 2 3 我该怎么办?我的第一个想法是某种形式的for循环,但我只知道如何用Python编写它们 像这样的事情可能会奏效。这取决于数据的结构,例如,您可能需要使用nrow切换length data <- c(0,1,0,0,0,0) c( rep(0,which(data == 1)+1), 1:(length
我该怎么办?我的第一个想法是某种形式的for循环,但我只知道如何用Python编写它们 像这样的事情可能会奏效。这取决于数据的结构,例如,您可能需要使用
nrow
切换length
data <- c(0,1,0,0,0,0)
c( rep(0,which(data == 1)+1), 1:(length(data)-which(data == 1))-1 )
您可以简单地使用
rle
和sequence
:
vec <- c(0, 1, 0, 0, 0, 0)
with(rle(vec), sequence(lengths) - 1)
[1] 0 0 0 1 2 3
vec带有rleidfromdata.table
library(data.table)
sequence(table(rleid(vec)))-1
#[1] 0 0 0 1 2 3
或者按照@Andrew的建议使用制表法
(这会更快)
数据
vec这是否回答了您的问题。当然,当x!=0
。祝你好运!不完全是,输出应该是0 1 2 3。我在上面标记了另一个完美的答案。修复了该答案,但同意另一个答案更干净。这不起作用。重新校准信号可以是1、-1甚至0。您没有考虑-1。此外,您的代码根本无法工作,例如给出的示例没有正确地封装整个问题。但我欣赏你的彻底。我正在想办法用diff
回答这个问题。你有什么想法吗?你不能在这里使用diff。回想一下,数据有1,0和-1。检查我上面提供的解决方案。示例中有…
,这意味着它不是向量的结尾。您也可以使用表格()
(代替表格()
)
library(data.table)
sequence(table(rleid(vec)))-1
#[1] 0 0 0 1 2 3
sequence(tabulate(rleid(vec)))-1
vec <- c(0, 1, 0, 0, 0, 0)