dplyr如何解析具有相同值的查询
我有一个包含四列的数据框架,我感兴趣的是根据最小的“evalue”选择最佳的“Query\u id” 以下是我的数据框的外观: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
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))