我有一个数据框(df),例如
group value
a 4.2
a 4.5
a 6.2
b 5.1
b 3.5
a 4.2
a 5.1
b 6.4
b 3.3
b 4.1
a 5.0
所需的输出是
group value
a 4.5
a 6.2
a 5.1
a 5.0
b 5.1
b 6.4
b 4.1
即,期望的输出提取每个"组"的最小2"值。例如,
所需的输出包括除这些值的相关行之外的所有df行。我怎么能用R做到这一点?我会很高兴得到任何帮助。非常感谢。
答案 0 :(得分:4)
这是一个使用包data.table和部分排序的解决方案:
library(data.table)
setDT(DF)
DF[, sort(value, partial = 2)[1:2], by = group]
# group V1
#1: a 4.2
#2: a 4.2
#3: b 3.3
#4: b 3.5
DF[, sort(value, partial = 2)[-(1:2)], by = group]
# group V1
#1: a 6.2
#2: a 4.5
#3: a 5.1
#4: a 5.0
#5: b 6.4
#6: b 5.1
#7: b 4.1
当然,可以使用分割 - 应用 - 组合类型操作的众多替代方案中的一种。
答案 1 :(得分:2)
使用dplyr
library(dplyr)
df %>%
group_by(group) %>%
arrange(value) %>%
slice(-(1:2))
或者
df %>%
group_by(group) %>%
filter(rank(value, ties.method='max')>2)