2016-12-29 2 views
0

두 열이 같은 위치에서 실행 길이를 알고 싶습니다. 예를 들어, 다음 데이터 :여러 열이있는 rle을 R

v1 v2 
1 1 
1 1 
1 2 
1 3 
2 3 
2 4 
2 4 

나는 RLE 기능이 하나의 컬럼에 대해 무엇을 유사 (2,1,1,1,2)를 반환 무언가를 원한다. 이 작업을 수행 할 수있는 간단한 함수가 있습니까 (아니면이 함수를 사용하여 함수를이 함수를 처리 할 수 ​​있습니까?).

답변

4
우리는 함께 열을 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 
+1

'paste0'과 비슷한 또 다른 솔루션 :'library (tidyr); rle (unite (df1, v, 1 : ncol (df1), sep = "") $ v) $ length' –

+0

'data.table 입력 데이터에'v1'과'v2' 값이 같은 조합으로 다른 줄무늬가 있으면'setingTarget (df1) [, .N,. (v1, v2)] $ N'은 실패합니다. 예 : 'df2 -rbind (df1, df1)'에 이것을 적용하면'4 2 2 2 4'가되고 올바른 답은'2 1 1 1 2 2 1 1 1 2 2 '가됩니다. – Uwe

+0

@UweBlock 네, 맞습니다. 그래서, 나는 당신의 코멘트에 언급 된 사례에 대해'rleid'을 포함 시켰습니다. – akrun