根据第二列条件删除重复项

aga*_*tha 8 r

我试图根据不同列上的最大值从数据框中删除重复的行

所以,对于数据框:

df<-data.frame (rbind(c("a",2,3),c("a",3,4),c("a",3,5),c("b",1,3),c("b",2,6),c("r",4,5))
  colnames(df)<-c("id","val1","val2")

id val1 val2

  a    2    3

  a    3    4

  a    3    5

  b    1    3

  b    2    6

  r    4    5
Run Code Online (Sandbox Code Playgroud)

我想继续删除id的所有重复项,条件是对于相应的行,它们没有val2的最大值.

因此,数据框应成为:

  a    3    5

  b    2    6

  r    4    5
Run Code Online (Sandbox Code Playgroud)

- >删除所有重复项但保留df $ val2最大值的行为子集(df,df $ id =="a")

akr*_*run 9

使用base R。在这里,列为factors。确保将其转换为numeric

 df$val2 <- as.numeric(as.character(df$val2))
 df[with(df, ave(val2, id, FUN=max)==val2),]
 #  id val1 val2
 #3  a    3    5
 #5  b    2    6
 #6  r    4    5
Run Code Online (Sandbox Code Playgroud)

或使用 dplyr

 library(dplyr)
 df %>% 
    group_by(id) %>% 
    filter(val2==max(val2))
 #   id val1 val2
 #1  a    3    5
 #2  b    2    6
 #3  r    4    5
Run Code Online (Sandbox Code Playgroud)


Dav*_*urg 6

一种可能的方法是使用 data.table

library(data.table)
setDT(df)[, .SD[which.max(val2)], by = id]
##    id val1 val2
## 1:  a    3    5
## 2:  b    2    6
## 3:  r    4    5
Run Code Online (Sandbox Code Playgroud)