Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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
dplyr如何解析具有相同值的查询_R_Dplyr - Fatal编程技术网

dplyr如何解析具有相同值的查询

dplyr如何解析具有相同值的查询,r,dplyr,R,Dplyr,我有一个包含四列的数据框架,我感兴趣的是根据最小的“evalue”选择最佳的“Query\u id” 以下是我的数据框的外观: Query_id Subject_id percent_identity evalue 1 35538 contig404347 100 4.6e+00 2 35538 GeneScaffold_1991 100 4.6e+00 3 35539 GeneScaffo

我有一个包含四列的数据框架,我感兴趣的是根据最小的“evalue”选择最佳的“Query\u id”

以下是我的数据框的外观:

  Query_id        Subject_id percent_identity  evalue 
1    35538      contig404347              100 4.6e+00 
2    35538 GeneScaffold_1991              100 4.6e+00 
3    35539 GeneScaffold_2894              100 6.0e-18 
4    35539 GeneScaffold_3680              100 4.6e+00 
5    35540  GeneScaffold_530              100 8.0e-16 
6    35540      contig456880              100 1.3e+00 
这是
dplyr
代码

newdata <- as.data.frame(group_by(data, Query_id) %>% 
  summarise(
      Subject_id = Subject_id[1], 
      percent_identity = percent_identity[1], 
      evalue = min(evalue))

查询id的3559和35540正常,符合预期,但35538如何。即使两个id的evalue相同,它也只选择了第一个。这是
dplyr
的默认行为吗?

这与
dplyr
无关-您只“选择了第一个”

回想一下
dplyr
中的
summary
返回一行,并且您决定返回主题id的
Subject_id[1]
(即使这不符合最小的
evalue
!)。同样,
min(evalue)
返回(单个)最小值
evalue

如果您希望返回所有达到最小值的行,请尝试

data %>%
  group_by(Query_id) %>%
  filter(evalue==min(evalue))
它对数据帧的每一位进行子集,并返回所有行的最小值
evalue

或者,如果您只想为每个最小值选择一行,您可以这样做

data %>% group_by(Query_id) %>% slice(which.min(evalue))

它将返回达到最小值的行的第一个(对于每个
查询id
),其中第一个被返回,因为
which.min
返回的是什么(最小值的索引,第一个出现的索引),与
dplyr

无关,感谢您修复了我的错误,并提供了很好的解释。
data %>% group_by(Query_id) %>% slice(which.min(evalue))