我在清理已编译的数据集时遇到了一些麻烦。这是数据的样子:
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
我需要删除基于纬度和经度列的重复行,条件是count列在这些重复行中的数字大于0。那时应保留的行将是唯一的lat / long,count列中为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列中包含更多4个,因此只能移除4个。
答案 0 :(得分: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