возвращают последовательные дублированные строки в R со счетом (сравнивая несколько столбцов)

#r #duplicates

#r #дубликаты

Вопрос:

У меня есть входной фрейм данных / datatable, который выглядит примерно так:

 ID location jobid
X   city1    1
X   city1    2
Y   city2    3
Y   city3    4
Z   city1    5
X   city1    6
  

И я хочу вернуть те строки, в которых значения ID и location дублируются в последовательных строках, вместе с count (что-то вроде uniq -c в bash для выбранных столбцов): желаемый результат:

 ID location count 
X   city1     2
  

Есть идеи, как это сделать в R? Я использую cumsum, rle, но не могу сделать это правильно..
Спасибо!

Ответ №1:

Быстрое и грязное решение :

 DF <- 
read.csv(
text="ID,location,jobid
X,city1,1
X,city1,2
Y,city2,3
Y,city3,4
Z,city1,5
X,city1,6",as.is=T)

count <- rle(paste(DF$ID,DF$location,sep='|'))$lengths

res <- cbind(DF[cumsum(count),c('ID','location')],count)

> res
  ID location   count
2  X    city1       2
3  Y    city2       1
4  Y    city3       1
5  Z    city1       1
6  X    city1       1
  

и если вам нужны только те строки, которые имеют последовательные дубликаты, просто отфильтруйте res :

 res[res$count > 1,]

>  ID location   count
2  X    city1       2