r - 排序数据保持不同类型首次出现的原始相对位置

标签 r dplyr tidyverse

我有一个 tibble,d,其排列方式是 value 递减。

我想将所有相同的 type 收集在一起,同时保持每个 type 第一个条目的相对排列。这显示在 d_sorted 中。

普通的 group_by() 对我不起作用。

如何对我的数据进行排序?

library(tidyverse)

#before
d <- tribble(
  ~"type", ~"value",
  "R" , 109,
  "C" , 105,
  "B" , 80,
  "W" , 77,
  "R" , 70,
  "W" , 66,
  "A" , 58,
  "C" , 55
)


#after
d_sorted <- tribble(
  ~"type", ~"value",
  "R" , 109,
  "R" , 70,
  "C" , 105,
  "C" , 55,
  "B" , 80,
  "W" , 77,
  "W" , 66,
  "A" , 58
)

reprex package 创建于 2021-04-15 (v1.0.0)

最佳答案

您可以将 arrangematch 一起使用:

library(dplyr)
d %>% arrange(match(type, unique(type)))

#  type  value
#  <chr> <dbl>
#1 R       109
#2 R        70
#3 C       105
#4 C        55
#5 B        80
#6 W        77
#7 W        66
#8 A        58

在基础 R 中:

d[order(match(d$type, unique(d$type))), ]

关于r - 排序数据保持不同类型首次出现的原始相对位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67104934/

相关文章:

r - 在 tidyverse 中,类 "tbl"和 "tbl_df"的对象有什么区别?

r - 使用 dplyr 根据分组变量计算列 NA

r - 使用列表名称作为一列中的值列出到小标题中

r - 如何应用将数据帧作为 purrr 输入的函数

r - 我创建的返回 ggplot 对象的函数返回错误

r - 一个图中的多个时间序列

r - tidyr::pivot_wider() 重新排序按 `name_from` 分组的列名称

string - 将函数应用于两个不等向量的笛卡尔积

r - 使用 R 中另一个数据帧的日期时间过滤和汇总来自一个数据帧的数据

r - 如何使用 purrr 和 tidyr 修改嵌套数据框中的列类型