Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算R中列向量中的值更改后的行数?_R - Fatal编程技术网

如何计算R中列向量中的值更改后的行数?

如何计算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

我正在对输出为-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(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带有
rleid
from
data.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)