2016-08-04 144 views
-2

我具有低于如何通过R中列的值删除重复行?

 

    Email   | Action | Time 
    -------------- | -------- | ------------------- 
    [email protected] | checkin | 2016-07-11 08:50:59 
    [email protected] | checkin | 2016-07-11 08:51:42 
    [email protected] | checkin | 2016-07-11 08:55:13 -> this is duplicate data 
    [email protected] | checkout | 2016-07-11 19:15:20 
    [email protected] | checkin | 2016-07-12 08:58:20 
    [email protected] | checkin | 2016-07-12 09:15:00 
    [email protected] | checkin | 2016-07-12 09:20:13 -> this is duplicate data 
    [email protected] | checkout | 2016-07-12 20:20:10 

我需要与相同的动作值删除重复行中的数据帧(对于这种情况是checkincheckout)相同的日期(YYYY-MM-DD)内。它应该是这样的:

 

    Email   | Action | Time 
    -------------- | -------- | ------------------- 
    [email protected] | checkin | 2016-07-11 08:50:59 
    [email protected] | checkin | 2016-07-11 08:51:42 
    [email protected] | checkout | 2016-07-11 19:15:20 
    [email protected] | checkin | 2016-07-12 08:58:20 
    [email protected] | checkin | 2016-07-12 09:15:00 
    [email protected] | checkout | 2016-07-12 20:20:10 

我知道我可以substr时间列,以获得YYYY-MM-DD,但我没有任何想法如何去除重复行。在此先感谢您的帮助:)

+0

请勿为此使用字符串处理函数。使用'as.POSIXct'和'as.Date'。 – Roland

+0

啊谢谢。你说得对,我可以使用'as.Date'来获取日期。现在,我需要找到一种方法来删除重复的数据。我曾尝试过“重复”,但结果不符合我的意图。 –

回答

0

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

##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  
[email protected] checkin 2016-07-11 08:50:59 2016-07-11 
[email protected] checkin 2016-07-11 08:51:42 2016-07-11 
[email protected] checkout 2016-07-11 19:15:20 2016-07-11 
[email protected] checkin 2016-07-12 08:58:20 2016-07-12 
[email protected] checkin 2016-07-12 09:15:00 2016-07-12 
[email protected] checkout 2016-07-12 20:20:10 2016-07-12 

如果您不希望有Days列了,你可以将其删除:

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

我希望这有助于。

+0

酷!它可以工作,但它应该绑定到新的数据框,例如'new_flight_info <-flights_info [!duplicated(flights_info [,c(“Email”,“Action”,“Days”)]), - ncol(flights_info)] ' 我不知道为什么...... –

+0

@AsepBagjaPriandana,你可以命名你认为合适的名字。只要数据是你想要的,名字就是主观的。 – Abdou