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