如何删除重复项但将最新数据保存在R中

Lor*_*ort 3 merge r dataframe

我有以下两个数据框:

df1 = data.frame(names=c('a','b','c','c','d'),year=c(11,12,13,14,15), Times=c(1,1,3,5,6))
df2 = data.frame(names=c('a','e','e','c','c','d'),year=c(12,12,13,15,16,16), Times=c(2,2,4,6,7,7))
Run Code Online (Sandbox Code Playgroud)

我想知道如何合并上面的df,但只保留最近的时间取决于年份.它应该如下所示:

Names  Year   Times
a      12     2
b      12     2
c      16     7
d      16     7
e      13     4
Run Code Online (Sandbox Code Playgroud)

42-*_*42- 5

我猜你并不是要合并这些,而是​​通过堆叠来组合.您的问题不明确,因为"重复"可能发生在数据帧级别或矢量级别.您的示例不会在数据帧级别显示任何重复,但会在矢量级别显示.描述问题的最佳方法是,Times如果names值为value,则需要每个组中的最后一个(或最大)条目:

> df1
  names year Times
1     a   11     1
2     b   12     1
3     c   13     3
4     c   14     5
5     d   15     6
> df2
  names year Times
1     a   12     2
2     e   12     2
3     e   13     4
4     c   15     6
5     c   16     7
6     d   16     7
> dfr <- rbind(df1,df2)
> dfr <-dfr[order(dfr$Times),]
> dfr[!duplicated(dfr, fromLast=TRUE) , ]
   names year Times
1      a   11     1
2      b   12     1
6      a   12     2
7      e   12     2
3      c   13     3
8      e   13     4
4      c   14     5
5      d   15     6
9      c   15     6
10     c   16     7
11     d   16     7

> dfr[!duplicated(dfr$names, fromLast=TRUE) , ]
   names year Times
2      b   12     1
6      a   12     2
8      e   13     4
10     c   16     7
11     d   16     7
Run Code Online (Sandbox Code Playgroud)