通过限制删除r中的重复观察

时间:2016-04-29 12:35:22

标签: r

我有一个数据集,其中包含ident变量的副本。 我只需要选择每个标识的1个观察值,它需要是最新值,即结果数据应包含对于“年份”在初始数据集中最高的标识的观察结果。

我认为一般情况如下:

1. ident   value   year
 2. A       1       19X1
 3. A       2       19X2
 4. B       4       19X2
 5. B       2       19X1
 6. B       1       19X3
 7. C       1       19X4
 8. C       2       19X1

(我不能在这里的正确表格中订购,所以请忽略左边的编号列表)

只有,我有数十万只。

结果数据集的顺序对我来说并不重要。

2 个答案:

答案 0 :(得分:1)

使用库dplyr,您可以执行以下操作:

library(dplyr)
df %>% group_by(ident) %>% arrange(desc(year)) %>% slice(1)

输出如下:

Source: local data frame [3 x 4]
Groups: ident [3]

    X1. ident value  year
  (dbl) (chr) (int) (chr)
1     3     A     2  19X2
2     6     B     1  19X3
3     7     C     1  19X4

这假定year采用的格式是按降序排序,使其从最新到最旧。

注意:那个x1。列是上面输入数据的结果。我只是按原样阅读。

答案 1 :(得分:0)

尝试

df <- do.call(rbind, lapply(split(df, df$ident), 
                            function(x) x[which.max(x$year), ]))