我有一个这样的数据框:
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***
是否有一种简单的方法,而不是一次跳过每个字节并与上一个字节检查其值?请指教。
答案 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