根据 2 列和第三列中的条件删除重复行
Posted
技术标签:
【中文标题】根据 2 列和第三列中的条件删除重复行【英文标题】:Remove duplicate rows based on 2 columns and a condition in a third column 【发布时间】:2017-10-23 20:30:09 【问题描述】:我在清理已编译的数据集时遇到了一些问题。数据如下所示:
site unique_id date latitude longitude depth name count
1 L012 L012_1 no data 18.17606 -65.10571 40 dat1 0
2 L012 L012_1 no data 18.17606 -65.10571 40 dat2 5
3 L012 L012_1 no data 18.17606 -65.10571 40 dat3 4
4 B197 B197_1 no data 18.21543 -65.04415 43 dat2 5
5 S56 S56_1 9/16/2016 18.24459 -65.11549 999 dat4 5
6 N9040 N9040_1 7/16/2013 18.26385 -64.90385 25 dat5 1
7 SC SC_1 7/19/2006 18.26267 -64.87237 24 dat6 0
8 SC SC_2 7/19/2006 18.26267 -64.87237 24 dat6 0
我需要根据纬度和经度列删除重复的行,条件是计数列中的数字在这些重复行中大于 0。然后应该保留的行将是唯一的纬度/经度,计数列中为 0。这个df中的前三行就是这种情况。
同时,我需要保留所有唯一的纬度/经度(第 4、5、6 行),即使它们在计数列中的数字大于 0。我还需要保留任何重复的行相同的纬度/经度,但在计数列中有一个 0。
理想情况下,我希望生成的数据框如下所示:
site unique_id date latitude longitude depth name count
1 L012 L012_1 no data 18.17606 -65.10571 40 dat1 0
4 B197 B197_1 no data 18.21543 -65.04415 43 dat2 5
5 S56 S56_1 9/16/2016 18.24459 -65.11549 999 dat4 5
6 N9040 N9040_1 7/16/2013 18.26385 -64.90385 25 dat5 1
7 SC SC_1 7/19/2006 18.26267 -64.87237 24 dat6 0
8 SC SC_2 7/19/2006 18.26267 -64.87237 24 dat6 0
原来的数据框比这个大很多,并且count列中4s比较多,所以不能只去掉4s。
【问题讨论】:
【参考方案1】:这个怎么样?
library(dplyr)
df %>% group_by(latitude, longitude) %>% filter(n() == 1 | count == 0)
Source: local data frame [6 x 8]
Groups: latitude, longitude [5]
site unique_id date latitude longitude depth name count
<chr> <chr> <chr> <dbl> <dbl> <int> <chr> <int>
1 L012 L012_1 nodata 18.17606 -65.10571 40 dat1 0
2 B197 B197_1 nodata 18.21543 -65.04415 43 dat2 5
3 S56 S56_1 9/16/2016 18.24459 -65.11549 999 dat4 5
4 N9040 N9040_1 7/16/2013 18.26385 -64.90385 25 dat5 1
5 SC SC_1 7/19/2006 18.26267 -64.87237 24 dat6 0
6 SC SC_2 7/19/2006 18.26267 -64.87237 24 dat6 0
【讨论】:
以上是关于根据 2 列和第三列中的条件删除重复行的主要内容,如果未能解决你的问题,请参考以下文章