r - 在 r 中,如何按组对多个数字列中的最低数值进行排序?

标签 r sorting aggregate

** min.range 列中有 NA**

在 R 中,我有一个包含物种列表的数据框,每个数据框都有两个带有数值的相关列(overall.percentage 和 min.range)。对于每个物种,都有多个品系(代表不同的种群)。 这是数据框的示例:

species<- data.frame(species= c("dog", "dog", "dog", "cat", "cat", "fish", "fish"),
                 overall.percentage = c(12, 13, 19,  20, 12,  10, 50),
                 min.range= c(19, 19, 99,  1, 2,  NA, 26))

我想创建一个新列,根据每个物种在 2 个数字列中的任意一个中的最低值对所有物种(而不是种群)进行排序。

以上数据的结果将是:

species<- data.frame(species= c("dog", "dog", "dog", "cat", "cat", "fish", "fish"),
                 overall.percentage = c(12, 13, 19,  20, 12,  10, 50),
                 min.range= c(19, 19, 99,  1, 2,  NA, 26),
 order = (3, 3, 3, 1, 1, 2, 2))

(解释:“猫”在“顺序”中具有“1”,因为它在总体百分比和最小范围中具有最低值(即“1”)在所有其他物种中. 鱼的值为“2”,因为它具有第二低的值“10”,而“狗”的值为“3”,因为它具有次低的值 12)。

我想我需要: (1)按物种对数据框进行分组(使用聚合函数?) (2) 选择物种内的最低值(同时考虑两个数字列) (3) 然后创建一个新的数字列,根据每个物种在所有物种中的顺序为每个物种编号。 最终目标是使用这个新的“顺序”列按升序对物种进行排序,以进行 ggplotling。

我设法使用聚合函数仅根据一个参数(而不是同时根据两个参数)找到每个物种内的最小值: min_by_species <- 聚合((总体.百分比)~ 物种.英文.名称,数据 = 物种,最小值)

此外,我不清楚如何创建稍后将用于 ggploting 的“order”列。

最佳答案

这是使用 ave() 实现所需结果的一种选择:

species <- data.frame(
  species = c("dog", "dog", "dog", "cat", "cat", "fish", "fish"),
  overall.percentage = c(12, 13, 19, 20, 12, 10, 50),
  min.range = c(19, 19, 99, 1, 2, 44, 26)
)

species |>
  transform(
    value = ave(
      pmin(overall.percentage, min.range), species,
      FUN = min
    )
  ) |>
  transform(
    order = as.numeric(
      reorder(species, value)
    )
  ) |> 
  subset(select = -value)
#>   species overall.percentage min.range order
#> 1     dog                 12        19     3
#> 2     dog                 13        19     3
#> 3     dog                 19        99     3
#> 4     cat                 20         1     1
#> 5     cat                 12         2     1
#> 6    fish                 10        44     2
#> 7    fish                 50        26     2

关于r - 在 r 中,如何按组对多个数字列中的最低数值进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77294157/

相关文章:

r - 如何提取 lmer 输出的固定效应部分的相关性

r - R 中的 For 循环 - 创建新向量

r - 找出函数是在哪个版本的 R 中引入的

python - python问题中的排序列表

r - 如何按组计算计数,然后每组只保留一个

python pandas,试图找到两列的独特组合并在对第三列求和时合并

r - 不使用 head(key(DT),m) 对 data.table 进行子集化,使用二进制搜索而不是矢量扫描

java - 对数组进行排序后获取元素的排名

mongodb - 使用聚合在mongoDB中限制和排序每个组

sql - 按多列分组并将结果作为单独列中的数组