【问题标题】:Assign unique id to consecutive rows within a grouping variable in dplyr为 dplyr 中的分组变量中的连续行分配唯一 ID
【发布时间】:2021-07-13 04:40:31
【问题描述】:

假设我有以下data.frame:

a <- data.frame(group = "A", value = rnorm(mean = 1, sd = 2, n = 150))
b <- data.frame(group = "B", value = rnorm(mean = 1, sd = 2, n = 150))
c <- data.frame(group = "C", value = rnorm(mean = 1, sd = 2, n = 150))
df <- bind_rows(a, b, c)

我想为分组变量 (group) 中的每对连续行创建一个唯一 ID,例如:

df %>% group_by(group) %>% mutate(...)

所以组内的每个“二元组”都应该有一个唯一的 ID

有什么想法吗?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我们可以使用gl

    library(dplyr)
    df <- df %>%
        group_by(group) %>% 
        mutate(id = as.integer(gl(n(), 2, n()))) %>%
        ungroup
    

    【讨论】:

    • 太棒了!谢谢。 gl 在做什么?我似乎找不到文档
    • @Parseltongue 它生成一个因子列,我们用as.integer强制它为整数
    • 哇,太聪明了。
    【解决方案2】:

    另一个dplyr 选项使用ceiling + row_number()

    df %>%
      group_by(group) %>%
      mutate(id = ceiling(row_number() / 2)) %>%
      ungroup()
    

    【讨论】:

      【解决方案3】:

      另一种选择是使用rep 函数:

      df %>%
        group_by(group) %>%
        mutate(id = rep(seq(n()), each = 2, length = n())) %>%
        ungroup()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-31
        • 1970-01-01
        • 1970-01-01
        • 2017-03-15
        • 1970-01-01
        • 1970-01-01
        • 2014-06-03
        相关资源
        最近更新 更多