0
我想知道两列相同的运行长度。例如,下面的数据:在R中使用多个列的rle
v1 v2
1 1
1 1
1 2
1 3
2 3
2 4
2 4
我想类似RLE的功能是什么单个列东西,将返回(2,1,1,1,2)。有没有一个简单的函数可以做到这一点(或者也可以使用rle函数来处理这种情况)?
我想知道两列相同的运行长度。例如,下面的数据:在R中使用多个列的rle
v1 v2
1 1
1 1
1 2
1 3
2 3
2 4
2 4
我想类似RLE的功能是什么单个列东西,将返回(2,1,1,1,2)。有没有一个简单的函数可以做到这一点(或者也可以使用rle函数来处理这种情况)?
我们可以paste
列在一起,适用rle
并获得lengths
rle(do.call(paste0, df1))$lengths
#[1] 2 1 1 1 2
或用data.table
library(data.table)
setDT(df1)[, .N, .(v1, v2)]$N
#[1] 2 1 1 1 2
或者更好的办法是用rleid
data.table
setDT(df1)[, .N, rleid(v1, v2)]$N
类似于'paste0'的另一种解决方案:'library(tidyr); rle(unite(df1,v,1:ncol(df1),sep =“”)$ v)$ lengths' –
data.table如果在输入数据中有'v1'和'v2'值相同组合的另一条纹,setDT(df1)[,.N,。(v1,v2)] $ N'的解决方案将失败。例如。将其应用于'df2 < - rbind(df1,df1)',您将得到'4 2 2 2 4',而正确的答案是'2 1 1 1 2 2 1 1 1 2'。 – Uwe
@UweBlock是的,你是对的。所以,我在你评论中提到的案例中包含了'rleid'。 – akrun