vickujiang 2021-05-14 14:03 采纳率: 18.2%
浏览 165

R语言中的row_number()列出排序index的时候对于并列的情况怎么处理?

例如:

df<- df %>% group_by(df) %>% dplyr::mutate(n = row_number())

这个语句怎么解读

  • 写回答

1条回答 默认 最新

  • ARMFUN 2024-06-21 19:42
    关注
    library(dplyr)
    
    # 创建示例数据框
    df <- data.frame(
      group = c("A", "A", "B", "B", "B", "C"),
      value = c(5, 5, 1, 3, 3, 2)
    )
    
    # 使用 group_by 和 mutate 添加行号
    df <- df %>%
      group_by(group) %>%
      mutate(n = row_number())
    
    print(df)
    
    解释
    df 数据框:
    group    value
    A    5
    A    5
    B    1
    B    3
    B    3
    C    2
    group_by(group):按 group 列对数据框进行分组。每个组中的行将独立处理。
    
    mutate(n = row_number()):为每个组添加一列 n,该列表示每行在其所属组中的行号。
    
    最终结果是:
    # A tibble: 6 × 3
    # Groups:   group [3]
      group value     n
      <chr> <dbl> <int>
    1 A         5     1
    2 A         5     2
    3 B         1     1
    4 B         3     2
    5 B         3     3
    6 C         2     1
    处理并列情况
    如果希望处理并列情况,比如希望根据某列排序,并对并列项有特定的处理,可以使用 dense_rank 或 min_rank。例如:
    
    df <- df %>%
      group_by(group) %>%
      mutate(n_dense = dense_rank(value))
    
    print(df)
    
    dense_rank 会对并列项赋予相同的排名,但不会跳过排名。例如,如果有两个并列项排在第一位,则下一个排名为2,而不是3。
    
    示例输出
    # A tibble: 6 × 4
    # Groups:   group [3]
      group value     n n_dense
      <chr> <dbl> <int>   <int>
    1 A         5     1       1
    2 A         5     2       1
    3 B         1     1       1
    4 B         3     2       2
    5 B         3     3       2
    6 C         2     1       1
    这里,n_dense 列显示了 dense_rank 的结果。对于 A 组中的两个 5,它们都被赋予了相同的排名 1。对于 B 组中的两个 3,它们都被赋予了相同的排名 2。
    
    评论

报告相同问题?