在数据框中有条件地删除行

时间:2016-07-11 16:16:26

标签: r dataframe

我有一个数据框,我希望通过获取具有最大值的行来删除一些重复的行。

这里简化了我的数据框示例:

    Code   Weight  Year
1   27009  289     1975
2   27009  300     1975
3   27009  376     1977
4   30010  259     1975
5   30010  501     1979
6   30010  398     1979
[....]

我的输出应该是:

    Code   Weight  Year
1   27009  300     1975
2   27009  376     1977
3   30010  259     1975
4   30010  501     1979
[....]

在代码和重量之间我还有5个具有不同值的列,以及重量和第一年之间的列,但值仍然不同。

我应该使用if语句吗?

2 个答案:

答案 0 :(得分:0)

您可以使用dplyr包:

df <- read.table(text = "Code   Weight  Year
                         27009  289     1975
                         27009  300     1975
                         27009  376     1977
                         30010  259     1975
                         30010  501     1979
                         30010  398     1979", header = TRUE)

library(dplyr)
df$x <- rnorm(6)

df %>% 
  group_by(Year, Code) %>% 
  slice(which.max(Weight))

#    Code Weight  Year          x
#   (int)  (int) (int)      (dbl)
# 1 27009    300  1975  1.3696332
# 2 30010    259  1975  1.1095553
# 3 27009    376  1977 -1.0672932
# 4 30010    501  1979  0.1152063

作为第二种解决方案,您可以使用data.table包。

setDT(df)
df[order(-Weight) ,head(.SD,1), keyby = .(Year, Code)]

结果是一样的。

答案 1 :(得分:0)

只需使用CodeYear作为分组在基础R中运行aggregate。这将采用所有其他数字列的最大值:

finaldf <- aggregate(. ~ Code + Year, df, FUN = max)