gpt4 book ai didi

R:如何计算 1 的个数并写入向量

转载 作者:行者123 更新时间:2023-12-04 12:05:23 28 4
gpt4 key购买 nike

我有这样的信号向量:

a <- c(1,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1)

我将计算 1 在一个原始文件中出现的频率,并将其写入向量 b,例如对于向量 a 它应该导致:

b
5,2,1,1,1,1,3

原因是我将绘制一个直方图,显示事件长度的分布。也许 R 中已经有一个函数可以做到这一点?否则用 if 循环?

干杯格雷格

最佳答案

您可以尝试rle(请注意,这些解决方案也来自base R)

with(rle(a), lengths[!!values])
#[1] 5 2 1 1 1 1 3

或者

unname(table(cumsum(c(1,abs(diff(a)))))[c(TRUE, FALSE)])
#[1] 5 2 1 1 1 1 3

如果向量不是二进制的

with(rle(a), lengths[values==1])
#[1] 5 2 1 1 1 1 3

或者

unname(table(cumsum(c(1,abs(diff(a==1)))))[c(TRUE, FALSE)])

编辑

如果向量以 1 以外的数字开头。例如 02(正如@Ananda Mahto 在评论中提到的)

 a[1] <- 2
a1 <- a[which(a==1)[1]:length(a)]
unname(table(cumsum(c(1,abs(diff(a1==1)))))[c(TRUE, FALSE)])
#[1] 4 2 1 1 1 1 3
with(rle(a), lengths[values==1])
#[1] 4 2 1 1 1 1 3



或者

with(rle(a == 1), lengths[values]) # from @Richard Scriven's comments

关于R:如何计算 1 的个数并写入向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27222363/

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