我有一个如下所示的数据集。R中是否有一行代码来排列从最丰富的物种(在列中发生的最多)到最少的物种?谢谢!
df <- tibble::tribble(
~name,
"Species A",
"Species A",
"Species B",
"Species C",
"Species A",
"Species C",
"Species B",
"Species A"
)发布于 2022-05-11 08:12:50
您可以尝试使用table,对此进行排序,使用match对names和order进行排序。
df[order(match(df$name, names(sort(table(df$name), decreasing=TRUE)))),]
## A tibble: 8 × 1
# name
# <chr>
#1 Species A
#2 Species A
#3 Species A
#4 Species A
#5 Species B
#6 Species B
#7 Species C
#8 Species C或者使用split
. <- split(seq_len(nrow(df)), df$name)
df[unlist(.[order(lengths(.), decreasing=TRUE)], FALSE, FALSE),]
## A tibble: 8 × 1
# name
# <chr>
#1 Species A
#2 Species A
#3 Species A
#4 Species A
#5 Species B
#6 Species B
#7 Species C
#8 Species C或者,如果只对向量进行排序:
. <- sort(table(df$name), decreasing=TRUE)
rep(names(.), .)
#[1] "Species A" "Species A" "Species A" "Species A" "Species B" "Species B"
#[7] "Species C" "Species C"发布于 2022-05-11 08:18:25
您还可以按事件发生的次数对该因素进行reorder,然后sort该因素:
data$species <- reorder(data$species, data$species, FUN = length) |>
sort(decreasing = T)输出
data
species
1 Species A
2 Species A
3 Species A
4 Species A
5 Species C
6 Species C
7 Species B
8 Species B发布于 2022-05-11 09:15:13
data.table解决方案
library(data.table)
data <- setDT(data)[, n := .N, species][order(-n, species)][, n := NULL]输出
data
# species
# 1: Species A
# 2: Species A
# 3: Species A
# 4: Species A
# 5: Species B
# 6: Species B
# 7: Species C
# 8: Species C数据
data <- tibble(
species = c(
"Species A",
"Species A",
"Species B",
"Species C",
"Species A",
"Species C",
"Species B",
"Species A")
)https://stackoverflow.com/questions/72197526
复制相似问题