根据中位数删除特定的重复行
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.max
和 slice
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]
我目前有一个如下所示的数据框:
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.max
和 slice
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]