根据中位数删除特定的重复行

remove specific duplicate rows based on median

我目前有一个如下所示的数据框:

        result 1    result 2    result 3    median 
item 1    8             7           6         7 
item 5    1             2           3         2 
item 1    6             5           4         5
item 5    3             4           5         4 

我想根据中位数删除重复项,我想保留具有较高中位数的重复项。 问题在于行名(第 1 项等)不是它们自己的列,因此无法使用 $ 操作访问它。

我怎样才能做到这一点?提前致谢。

我们可以按 'row' 分组,然后 filter 具有 'median'

max 值的行
library(dplyr)
df1 %>%
   group_by(row) %>% 
   filter(median == max(median))
# A tibble: 2 x 5
# Groups: row [2]
#   row    result1 result2 result3 median
#   <chr>    <int>   <int>   <int>  <int>
#1 item 1       8       7       6      7
#2 item 5       3       4       5      4

如果 'median' 的最大值有关系并且我们想要匹配的第一行,则使用 which.maxslice

df1 %>%
    group_by(row) %>%
    slice(which.max(median))

您可以简单地order减少并删除重复项,即

df <- df[order(df$median, decreasing = TRUE),]
df[!duplicated(df$row),]

这给出了,

    row result1 result2 result3 median
1 item1       8       7       6      7
4 item5       3       4       5      4

这里是 data.table

的解决方案
library("data.table")
D <- fread(
"item   result1    result2    result3    median
item1    8             7           6         7
item5    1             2           3         2
item1    6             5           4         5
item5    3             4           5         4")
D[, maxmed:=max(median), by=item][median==maxmed]