我有一个数据框,我希望通过获取具有最大值的行来删除一些重复的行。
这里简化了我的数据框示例:
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语句吗?
答案 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)
只需使用Code
和Year
作为分组在基础R中运行aggregate。这将采用所有其他数字列的最大值:
finaldf <- aggregate(. ~ Code + Year, df, FUN = max)