在R编程中一起找到两位数的最大跨度

时间:2018-10-19 14:10:18

标签: r

我有一个这样的数据框:

df<- data.frame(a = 0,b=0,c=1,d=1,e=0,f=1,g=1,h=1)

print(df)会给出结果

 a b c d e f g h

 0 0 1 1 0 1 1 1

现在,我需要找出1s的跨度,这是最大的。在上述情况下,我们将两次加1在一起(C列和D列),然后零归入下一列,再加三次(f,g,h列)。我希望结果是这样的,因为3等于2和3的最大值。

 a b c d e f g h ***Max_Span***

 0 0 1 1 0 1 1 1 ***3***

是否有一种简单的方法,而不是一次跳过每个字节并与上一个字节检查其值?请指教。

1 个答案:

答案 0 :(得分:2)

您可能需要功能rle

下面是一个示例,以查看其功能(计算序列数):

vect <- c(1, 0, 0, 1, 1, 1, 0)
rle(vect)
Run Length Encoding
  lengths: int [1:4] 1 2 3 1
  values : num [1:4] 1 0 1 0

编辑:

如果只想使用特定值,请使用which

rle_vect <- rle(vect) #first we assign the output from rle
rle_vect$lengths[which(rle_vect$values==1)] # then we can access where values==1
#[1] 1 3

在您的情况下,您只希望lengths的最大1数:

rle_1 <- rle(df[1,])
max(rle_1$lengths[which(rle_1$values==1)])
#[1] 3

数据:

df[1, ]
#  a b c d e f g h
#1 0 0 1 1 0 1 1 1