首页 > 解决方案 > 在 R 中保留最近的重复行

问题描述

所以,我有一个包含账单编号、日、月、年和总价值的数据集。有一堆重复的公牛号码,我想保留第一个。如果有相同日期、月份和年份的重复项,我想保留总价值最高的那个。

例如,如果数据集现在看起来像这样:

Bill Number   Day   Month    Year   Ag. Value
   1           10     4       1998     10
   1           11     4       1998     14
   2           23     11      2001     12
   2           23     11      2001     9
   3           11     3       2005     8
   3           12     3       2005     9
   3           13     3       2005     4

我希望结果如下所示:

Bill Number  Day  Month  Year  Ag. Value
    1         10    4     1998    10
    2         23    11    2001    12
    3         11    3     2005    8

我不确定是否有一个命令我可以使用并且只是介绍所有这些参数,或者我是否应该分阶段进行,但无论哪种方式我都不确定如何开始。我用过duplicate()然后unique()卡住了。

谢谢!

标签: rdataset

解决方案


library( data.table )

dt <- fread("Bill_Number   Day   Month    Year   Ag_Value
1           10     4       1998     10
1           11     4       1998     14
2           23     11      2001     12
2           23     11      2001     9
3           11     3       2005     8
3           12     3       2005     9
3           13     3       2005     4", header = TRUE)

dt[ !duplicated( Bill_Number), ]  

#    Bill_Number Day Month Year Ag_Value
# 1:           1  10     4 1998       10
# 2:           2  23    11 2001       12
# 3:           3  11     3 2005        8

或者

dt[, .SD[1], by = .(Bill_Number) ]  #other approach, a bit slower

推荐阅读