我有一个数据集,其中包含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
(我不能在这里的正确表格中订购,所以请忽略左边的编号列表)
只有,我有数十万只。
结果数据集的顺序对我来说并不重要。
答案 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), ]))