如何按R中列的值删除重复行?

时间:2016-08-04 10:26:34

标签: r data-cleaning

我有下面的数据框


    Email          | Action   | Time 
    -------------- | -------- | -------------------
    a@mydomain.com | checkin  | 2016-07-11 08:50:59
    b@mydomain.com | checkin  | 2016-07-11 08:51:42
    a@mydomain.com | checkin  | 2016-07-11 08:55:13 -> this is duplicate data
    a@mydomain.com | checkout | 2016-07-11 19:15:20
    c@mydomain.com | checkin  | 2016-07-12 08:58:20
    a@mydomain.com | checkin  | 2016-07-12 09:15:00
    c@mydomain.com | checkin  | 2016-07-12 09:20:13 -> this is duplicate data
    a@mydomain.com | checkout | 2016-07-12 20:20:10

我需要在相同的日期(checkin)内删除具有相同操作值的重复行(对于此情况为checkoutYYYY-MM-DD)。它应该是这样的:


    Email          | Action   | Time 
    -------------- | -------- | -------------------
    a@mydomain.com | checkin  | 2016-07-11 08:50:59
    b@mydomain.com | checkin  | 2016-07-11 08:51:42
    a@mydomain.com | checkout | 2016-07-11 19:15:20
    c@mydomain.com | checkin  | 2016-07-12 08:58:20
    a@mydomain.com | checkin  | 2016-07-12 09:15:00
    a@mydomain.com | checkout | 2016-07-12 20:20:10

我知道我可以substr时间列来获取YYYY-MM-DD,但我不知道如何删除重复的行。在此先感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

首先创建一个名为Days的列,以YYYY-d-m格式保留日期。然后使用EmailActionDays的组合来查找重复项并将其删除。

##Create the column
flights_info$Days <- as.POSIXct(strftime(flights_info$Time, format = "%Y-%d-%m %H:%M:%S"), format="%Y-%d-%m")

##Remove the duplicates
flights_info[!duplicated(flights_info[,c("Email","Action","Days")]),]

期望的输出:

Email          Action   Time                Days      
 a@mydomain.com checkin  2016-07-11 08:50:59 2016-07-11
 b@mydomain.com checkin  2016-07-11 08:51:42 2016-07-11
 a@mydomain.com checkout 2016-07-11 19:15:20 2016-07-11
 c@mydomain.com checkin  2016-07-12 08:58:20 2016-07-12
 a@mydomain.com checkin  2016-07-12 09:15:00 2016-07-12
 a@mydomain.com checkout 2016-07-12 20:20:10 2016-07-12

如果您不想再使用Days列,可以将其删除:

flights_info[!duplicated(flights_info[,c("Email","Action","Days")]),-ncol(flights_info)]

我希望这会有所帮助。