首页 > 解决方案 > 根据条件(位置)删除重复行

问题描述

我有一个看起来像这样的数据集

df <- data.frame("id" = c("Alpha", "Alpha", "Alpha","Alpha","Beta","Beta","Beta","Beta"), 
                 "Year" = c(1970,1970,1970,1971,1980,1980,1981,1982), 
                 "Val" = c(2,3,-2,5,2,5,3,5))

我对每个 id 和时间标识符都有多重观察 - 例如,我有 3 个不同的 alpha 1970 值。我想每个 id/year 只保留一个观察结果,最值得注意的是每个 id/year 出现的最后一个观察结果。最终数据集应如下所示:

final <- data.frame("id" = c("Alpha","Alpha","Beta","Beta","Beta"), 
                    "Year" = c(1970,1971,1980,1981,1982), 
                    "Val" = c(-2,5,5,3,5))

有谁知道我该如何解决这个问题?

非常感谢您的帮助

标签: rduplicatesdata-manipulation

解决方案


如果您对data.table解决方案持开放态度,则可以非常简洁地完成:

library(data.table)

setDT(df)[, .SD[.N], by = c("id", "Year")]
#>       id Year Val
#> 1: Alpha 1970  -2
#> 2: Alpha 1971   5
#> 3:  Beta 1980   5
#> 4:  Beta 1981   3
#> 5:  Beta 1982   5

by = c("id", "Year")id按和对 data.table 进行分组Year.SD[.N]然后返回每个此类组中的最后一行。


推荐阅读