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

时间:2018-02-12 08:29:50

标签: r dataframe duplicates 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 

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

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

3 个答案:

答案 0 :(得分:4)

您可以简单地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

答案 1 :(得分:1)

我们可以按'行'分组,然后filter分组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

如果“中位数”的最大值存在关联,我们希望第一行匹配,则将which.maxslice

一起使用
df1 %>%
    group_by(row) %>%
    slice(which.max(median))

答案 2 :(得分:0)

以下是 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]