user8831872
user8831872

Reputation: 383

Remove records which have the same datetime stamp

My data has this format:

DF <- data.frame(ids = c("uniqueid1", "uniqueid1", "uniqueid1", "uniqueid2", "uniqueid2", "uniqueid2", "uniqueid2", "uniqueid3", "uniqueid3", "uniqueid3", "uniqueid4", "uniqueid4", "uniqueid4"), stock_year = c("April 2014", "March 2012", "April 2014", "January 2017", "January 2016", "January 2015", "January 2014", "November 2011", "November 2011", "December 2009", "August 2001", "July 2000", "May 1999"))

         ids    stock_year
1  uniqueid1    April 2014
2  uniqueid1    March 2012
3  uniqueid1    April 2014
4  uniqueid2  January 2017
5  uniqueid2  January 2016
6  uniqueid2  January 2015
7  uniqueid2  January 2014
8  uniqueid3 November 2011
9  uniqueid3 November 2011
10 uniqueid3 December 2009
11 uniqueid4   August 2001
12 uniqueid4     July 2000
13 uniqueid4      May 1999

How is it possible to remove totally rows which have in the same id have a same value in stock_year column?

An example output of expected results is this:

 DF <- data.frame(ids = c("uniqueid2", "uniqueid2", "uniqueid2", "uniqueid2", "uniqueid4", "uniqueid4", "uniqueid4"), stock_year = c("January 2017", "January 2016", "January 2015", "January 2014", "August 2001", "July 2000", "May 1999"))


        ids   stock_year
1 uniqueid2 January 2017
2 uniqueid2 January 2016
3 uniqueid2 January 2015
4 uniqueid2 January 2014
5 uniqueid4  August 2001
6 uniqueid4    July 2000
7 uniqueid4     May 1999

Upvotes: 1

Views: 50

Answers (1)

akrun
akrun

Reputation: 887501

We can group by 'ids' and check for duplicates to filter those 'ids' having no duplicates

library(dplyr)
DF %>%
  group_by(ids) %>%
  filter(!anyDuplicated(stock_year))

Or using ave from base R

DF[with(DF, ave(as.character(stock_year), ids, FUN=anyDuplicated)!=0),]

Upvotes: 2

Related Questions