我有一个看起来像这样的数据框:
n4=
sector turb dist
1 sector1 T02 828.66
2 sector1 T04 1114.58
3 sector1 T05 1012.22
4 sector2 T03 992.64
5 sector2 T05 1012.22
6 sector2 T06 1158.38
7 sector3 T03 992.64
8 sector12 T02 828.66
9 sector12 T04 1114.58
我想保留具有唯一扇区名称的行,而措施是将具有最小值的行保留在dist列中:
sector turb dist
1 sector1 T02 828.66
4 sector2 T03 992.64
7 sector3 T03 992.64
8 sector12 T02 828.66
我知道我必须根据扇区将它们分组:
result = n4 %>%
dplyr::group_by(sector)
但是随后使用select或filter命令无法按我的尝试进行操作:
result = n4 %>%
dplyr::group_by(sector)%>%
dplyr::select(which.min(dist))
任何想法我该怎么做?
答案 0 :(得分:3)
您可以使用filter
代替select
,也可以使用slice
> n4 %>%
dplyr::group_by(sector)%>%
dplyr::filter(dist==min(dist))
# A tibble: 4 x 3
# Groups: sector [4]
sector turb dist
<fct> <fct> <dbl>
1 sector1 T02 829.
2 sector2 T03 993.
3 sector3 T03 993.
4 sector12 T02 829.
如果您更喜欢使用R base,请尝试使用aggregate
> aggregate(.~sector, data=n4, min)
sector turb dist
1 sector1 1 828.66
2 sector12 1 828.66
3 sector2 2 992.64
4 sector3 2 992.64
您可以check this answer获得完成此任务的其他选择。
答案 1 :(得分:2)
我们需要module.exports = {
extend: 'teaser-widgets',
label: 'Simple Teaser'
};
而不是slice
来对行进行子集化。 select
函数用于选择数据集的列。如果“扇区”的顺序应与输入数据中“扇区”的出现顺序相同,则将该列更改为在输入数据顺序中指定了select
的{{1}} < / p>
factor
或使用levels
n4 %>%
dplyr::group_by(sector = factor(sector, levels = unique(sector)))%>%
dplyr::slice(which.min(dist))
# A tibble: 4 x 3
# Groups: sector [4]
# sector turb dist
# <fct> <chr> <dbl>
#1 sector1 T02 829.
#2 sector2 T03 993.
#3 sector3 T03 993.
#4 sector12 T02 829.
base R