根据 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 列和第三列中的条件删除重复行的主要内容,如果未能解决你的问题,请参考以下文章

Python:在特定列中删除值= 0行[重复]

如何检查同一数据框列中的重复值并通过根据频率删除行来应用 if 条件?

第三列单元格应该是excel第一列和第二列中两个数字的乘积

求秩可以取第一列和第三列的值吗

如何根据谷歌表格中的名称删除重复的行?

如何将数据绘制为 2x 2 矩阵