【问题标题】:remove specific duplicate rows based on median [duplicate]根据中位数删除特定的重复行 [重复]
【发布时间】:2018-02-12 08:29:50
【问题描述】:

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

        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 项等)不是它们自己的列,因此无法通过 $ 操作访问。

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

【问题讨论】:

  • 也可以使用top_n, df %>% group_by(row) %>% top_n(1, median)

标签: r dataframe duplicates median


【解决方案1】:

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

【讨论】:

  • 很抱歉造成混淆,但“行”列实际上只是行名(它不是自己的列) - 我该如何解决这个问题?谢谢你的帮助。看起来很容易解决。
  • 没关系,只是添加了另一列并处理了它。感谢您的帮助!
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    这是 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]
    

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 2021-07-04
      • 2015-04-20
      • 2017-11-26
      • 2015-02-20
      • 2021-02-27
      • 2022-11-17
      • 2014-03-14
      相关资源
      最近更新 更多