如何在 R 中按列值删除重复行?
How To Remove Duplicate Rows By Column's Value in R?
我有下面的数据框
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
我需要在同一日期 (YYYY-MM-DD
) 中删除具有相同操作值的重复行(在本例中为 checkin
和 checkout
)。应该是这样的:
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
,但我不知道如何删除重复的行。预先感谢您的帮助:)
首先创建一个名为 Days
的列,以 YYYY-d-m
格式保存日期。然后使用 Email
、Action
和 Days
的组合来查找重复项并删除它们。
##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)]
希望对您有所帮助。
我有下面的数据框
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
我需要在同一日期 (YYYY-MM-DD
) 中删除具有相同操作值的重复行(在本例中为 checkin
和 checkout
)。应该是这样的:
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
,但我不知道如何删除重复的行。预先感谢您的帮助:)
首先创建一个名为 Days
的列,以 YYYY-d-m
格式保存日期。然后使用 Email
、Action
和 Days
的组合来查找重复项并删除它们。
##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)]
希望对您有所帮助。