#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