Select 基于条件的数据框中的行,然后在新列中为它们分配优先级编号

Select rows from a dataframe based on a condition and then assign a priority number to them in a new column

我有一个数据集,其中包含有关每个网格中报告的事件案例数的信息。

no of cases grid number
12 454
22 345
34 67

我的任务是根据出现在每个网格框中的案例数量为每个网格框分配优先级。因此,如果网格号 67 有 34 个案例,则优先级为 1。网格号 345 将为 2,依此类推。 结果应该如下所示。

no of cases grid number priority
34 67 1
22 345 2
12 454 3

如果在分配优先级数字时碰巧出现平局(如果两个不同的网格报告的案例数相同),则应根据与感兴趣的网格相邻的案例总和来分配优先级。我希望我能清楚地表达我的问题。

作为 R 的绝对初学者,我什至努力开始这样做。

非常感谢您的帮助。

谢谢大家!

这是您要找的吗?

df = data.frame("no_of_cases" = c(12,22,34), "grid_number" = c(454,345,67))

df %>% arrange(desc(no_of_cases)) %>% mutate("priority" = rank(-no_of_cases))

您可以 arrange 数据按降序排列并将行号指定为 priority

library(dplyr)
df %>%
  arrange(desc(no_of_cases)) %>%
  mutate(priority = row_number())

#  no_of_cases grid_number priority
#1          34          67        1
#2          22         345        2
#3          12         454        3

或以 R 为基数 -

df$priority <- order(-df$no_of_cases)

数据

如果您以 格式提供数据,会更容易提供帮助 可重现格式 -

df <- structure(list(no_of_cases = c(12L, 22L, 34L), 
grid_number = c(454L, 345L, 67L)), row.names = c(NA, -3L), class = "data.frame")

使用data.table

library(data.table)
setkey(setDT(df)[order(-no_of_cases), priority := .I], priority)[]

-输出

   no_of_cases grid_number priority
1:          34          67        1
2:          22         345        2
3:          12         454        3

数据

df <- structure(list(no_of_cases = c(12L, 22L, 34L), 
grid_number = c(454L, 345L, 67L)), row.names = c(NA, -3L),
 class = "data.frame")