我目前有一个如下所示的数据框:
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无法访问它们。
我怎样才能做到这一点?提前致谢。
答案 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.max
与slice
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]