根据列的汇总功能对数据框的行进行排序

时间:2018-09-09 16:15:16

标签: r aggregate-functions

我有一个包含两列idvalue的数据框,并且有超过100k的观测值。

大约有1000个不同的ID。

我想创建两个新数据框,它们的数据与原始数据框的数据相同,但各行根据以下条件进行排序。

对于一个数据帧,如果两行r1r2分别具有ID id1id2,并且行数为id = id1小于id = id2的数目或行数,则r1应该出现在r2之前。

对于另一个数据帧,如果两行r1r2的ID为id1id2,并且一行的最大value具有{当id = id1应该出现在id = id2之前时,{1}小于行r1的最大值。

根据列的聚合函数定义了这两种排序,因此创建这种排序的解决方案将允许创建更多的排序类。

如何在R中有效地建立这样的顺序?

编辑: 这是我的代码,它可以工作,但是又慢又长。我想知道是否有更聪明,更快捷的方法。

r2

1 个答案:

答案 0 :(得分:1)

library(dplyr)

# Make a similar table as yours with ~1000 ids and 100k rows
df <- tibble(
  id = rnorm(n = 1E5, mean = 1000, sd = 150) %>% as.integer(),
  value = runif(1E5, 500, 1500)
)

# How many unique id's? Should be around 1000...
length(unique(df$id))
[1] 1052     

# First question, show infrequent id's first
df_sort_by_id_freq <- df %>%
  add_count(id) %>%
  arrange(n, id)

# Second question, show id's with smallest max first
df_sort_by_max <- df %>%
  group_by(id) %>%
  mutate(id_max = max(value)) %>%
  arrange(id_max, id, value)