【问题标题】:How to delete row when condition met in dplyr在dplyr中满足条件时如何删除行
【发布时间】:2021-02-09 19:51:58
【问题描述】:

我想在满足条件时删除其中一个重复行。

当“客户”和“年份”相同且“类型”不同时,删除重复行之一(对应于较大的成本值)。

client<- c(1,1,1,2,2,3,3,4, 5,5)
year <- c(2000, 2010, 2000, 2003, 2007, 2009, 2009, 2012, 2017, 2017)
type<-c("A", "A", "B", "B", "C","D","D", "A" , "C", "D")
cost<- c(34,56,78, 45,12,56,67,23,10, 89)
data<- tibble(cient,year, type,value)

client year type cost

1 1 2000 A 34
2 1 2010 A 56
3 1 2000 B 78
4 2 2003 B 45
5 2 2007 C 12
6 3 2009 D 56
7 3 2009 D 67
8 4 2012 A 23
9 5 2017 C 10
10 5 2017 D 89

因此,第 3 行和第 10 行应被删除,结果应如下所示:

client year type cost

1 1 2000 A 34
2 1 2010 A 56
3 2 2003 B 45
4 2 2007 C 12
5 3 2009 D 56
6 3 2009 D 67
7 4 2012 A 23
8 5 2017 C 10

我是 tidyverse 的新手,无法编写一个命令来过滤带有条件的行。

提前感谢您的帮助

【问题讨论】:

    标签: r dplyr conditional-statements


    【解决方案1】:

    我们可以使用row_numberslice_min 的组合来完成此操作。分组的row_number 是客户年份类型分组中的一种计数器。

    data %>%
        group_by(client, year, type) %>%
        mutate(rn = row_number()) %>%
        group_by(client, year, rn) %>%
        slice_min(cost)
    
      client  year type   cost    rn
       <dbl> <dbl> <chr> <dbl> <int>
    1      1  2000 A        34     1
    2      1  2010 A        56     1
    3      2  2003 B        45     1
    4      2  2007 C        12     1
    5      3  2009 D        56     1
    6      3  2009 D        67     2
    7      4  2012 A        23     1
    8      5  2017 C        10     1
    

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 2016-10-20
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多