我有一个非常大的Vector,其形式如下:
T_Nights <- c(0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0[... and so on])
此矢量有点像每两年10分钟的标志:“ 1” =夜晚,“ 0” =白天。这意味着长度为105264!
由于每24小时的白天和黑夜在一年中的每一天都不同,因此我需要获得多个“ 1”的总和,以获取有关我的夜晚时间的信息。
有没有办法为我所有的“ 1”值获取此向量的总和,但仍与下一包连续的“ 1”值分开。 这样,我可以得到一个值,告诉我一年中的每个夜晚,以分钟为单位(如果乘以10)有多长时间。
答案 0 :(得分:2)
对于您的问题,可以使用rle
函数来计算向量中等值游程的长度和值。
## Example data
T_Nights = c(0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1)
r = rle(T_Nights)
Run Length Encoding
lengths: int [1:6] 11 12 9 5 4 1
values : num [1:6] 0 1 0 1 0 1
r$lengths[r$values==1]
[1] 12 5 1