Select p 列所有值中具有最小值的 3 行
Select 3 rows which have the smallest value among all values in the column p
我有一个数据框 df。我想要 select 列 p.
中具有最小值的 3 行
df
p b
as 0.6 ab
yu 0.3 bc
hy 0.05 ak
get 0.7 ka
结果
p b
as 0.6 ab
yu 0.3 bc
hy 0.05 ak
两种方法:
df[df$p <= sort(df$p)[3],]
# p b
# as 0.60 ab
# yu 0.30 bc
# hy 0.05 ak
一个问题是,当 p
中出现并列(第三个)时,您将获得超过 3 行。此外,当少于 3 行时,这将无法正常工作。
另一种方法,如果您不关心顺序:
head(df[order(df$p),], n = 3)
它的优点是它总是给出最小的 3 或实际的行数。这样做的一个问题是它不会告诉您有平局,它只会限制行数。
(可以通过添加具有预先安排的顺序的列来减轻重新排序,然后在该列上重新排列 post head
。)
交给你哪个流程更有意义。
编辑:保留顺序的选项:
df[ rank(df$p) < 4,]
(灵感来自@NotThatKindODr 建议使用有序 row_number() %in% 1:3
)
您可以对 p 上的数据进行排序,然后过滤 1:x
中的行号
library(tidyverse)
df %>%
arrange(p) %>%
filter(row_number() %in% 1:3)
另一个 option 使用 dplyr::slice_min
library(dplyr)
df %>% slice_min(p, n = 3)
我有一个数据框 df。我想要 select 列 p.
中具有最小值的 3 行df
p b
as 0.6 ab
yu 0.3 bc
hy 0.05 ak
get 0.7 ka
结果
p b
as 0.6 ab
yu 0.3 bc
hy 0.05 ak
两种方法:
df[df$p <= sort(df$p)[3],]
# p b
# as 0.60 ab
# yu 0.30 bc
# hy 0.05 ak
一个问题是,当 p
中出现并列(第三个)时,您将获得超过 3 行。此外,当少于 3 行时,这将无法正常工作。
另一种方法,如果您不关心顺序:
head(df[order(df$p),], n = 3)
它的优点是它总是给出最小的 3 或实际的行数。这样做的一个问题是它不会告诉您有平局,它只会限制行数。
(可以通过添加具有预先安排的顺序的列来减轻重新排序,然后在该列上重新排列 post head
。)
交给你哪个流程更有意义。
编辑:保留顺序的选项:
df[ rank(df$p) < 4,]
(灵感来自@NotThatKindODr 建议使用有序 row_number() %in% 1:3
)
您可以对 p 上的数据进行排序,然后过滤 1:x
中的行号library(tidyverse)
df %>%
arrange(p) %>%
filter(row_number() %in% 1:3)
另一个 option 使用 dplyr::slice_min
library(dplyr)
df %>% slice_min(p, n = 3)