dplyr 如何解析具有相同值的查询
How does dplyr resolves the queries with the same values
我有一个包含四列的数据框,我感兴趣的是 select 基于最小 "evalue"
的最佳 "Query_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))
我得到这个输出
Query_id Subject_id percent_identity evalue
1 35538 contig404347 100.00 4.6e+00
2 35539 GeneScaffold_2894 100.00 6.0e-18
3 35540 GeneScaffold_530 100.00 8.0e-16
查询 ID 的 3559 和 35540 没问题,符合预期,但是 35538 怎么样。尽管两个 ID 的评估值相同,但它只 select 编辑了第一个。这是 dplyr
的默认行为吗?
与dplyr
无关 - 你仅"selected the first one".
回想一下 summarize
在 dplyr
return 的一行,你 决定 return Subject_id[1]
为主题 ID(即使这不符合最小值 evalue
!)。同样,min(evalue)
return 是(单个)最小值 evalue
。
如果您希望 return 所有获得最小值的行,请尝试
data %>%
group_by(Query_id) %>%
filter(evalue==min(evalue))
你的数据帧的每一位和 returns all 行的子集具有最小 evalue
.
或者如果您只想为每个最小值选择一行,您可以这样做
data %>% group_by(Query_id) %>% slice(which.min(evalue))
这将 return 达到最小值的行的 第一个 (对于每个 Query_id
),其中第一个是 return ed 因为那是 which.min
returns(最小值的索引,第一个出现的索引),与 dplyr
.
无关
我有一个包含四列的数据框,我感兴趣的是 select 基于最小 "evalue"
的最佳 "Query_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))
我得到这个输出
Query_id Subject_id percent_identity evalue
1 35538 contig404347 100.00 4.6e+00
2 35539 GeneScaffold_2894 100.00 6.0e-18
3 35540 GeneScaffold_530 100.00 8.0e-16
查询 ID 的 3559 和 35540 没问题,符合预期,但是 35538 怎么样。尽管两个 ID 的评估值相同,但它只 select 编辑了第一个。这是 dplyr
的默认行为吗?
与dplyr
无关 - 你仅"selected the first one".
回想一下 summarize
在 dplyr
return 的一行,你 决定 return Subject_id[1]
为主题 ID(即使这不符合最小值 evalue
!)。同样,min(evalue)
return 是(单个)最小值 evalue
。
如果您希望 return 所有获得最小值的行,请尝试
data %>%
group_by(Query_id) %>%
filter(evalue==min(evalue))
你的数据帧的每一位和 returns all 行的子集具有最小 evalue
.
或者如果您只想为每个最小值选择一行,您可以这样做
data %>% group_by(Query_id) %>% slice(which.min(evalue))
这将 return 达到最小值的行的 第一个 (对于每个 Query_id
),其中第一个是 return ed 因为那是 which.min
returns(最小值的索引,第一个出现的索引),与 dplyr
.