Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过比较R中一列中的值来选择行_R_Filter_Group By_Dplyr - Fatal编程技术网

通过比较R中一列中的值来选择行

通过比较R中一列中的值来选择行,r,filter,group-by,dplyr,R,Filter,Group By,Dplyr,我有一个数据框,看起来像: 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 secto

我有一个数据框,看起来像:

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))

你知道我该怎么做吗?

我们需要
slice
而不是
select
来对行进行子集划分。
select
功能用于选择数据集的列。如果“扇区”的顺序应与输入数据中“扇区”的出现顺序相同,则将该列更改为输入数据顺序中指定了
级别的
系数

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.
数据
n4我们需要
slice
而不是
select
来对行进行子集划分。
select
功能用于选择数据集的列。如果“扇区”的顺序应与输入数据中“扇区”的出现顺序相同,则将该列更改为输入数据顺序中指定了
级别的
系数

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.
数据
n4您可以使用
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.

您可以选择其他选项来完成此任务。

您可以使用
过滤器
而不是
选择
,也可以使用
切片

> 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.

您可以选择其他选项来完成此任务。

谢谢您的回复,但此处扇区列的排序更改为:
sector1、sector12、sector2、sector3
,如何修复该列?@AliHadjihoseini一个选项是将其转换为指定了
级别的
因子
列。更新了帖子谢谢您的回复,但是这里扇区列的排序更改为:
sector1、sector12、sector2、sector3
,我如何修复这个问题?@AliHadjihoseini一个选项是将其转换为指定了
级别的
因子
列。更新了帖子
> 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