【问题标题】:In R: Create a column with unique values for each cluster in another column by grouping variable在 R 中:通过对变量进行分组,为另一列中的每个集群创建具有唯一值的列
【发布时间】:2022-01-17 11:07:30
【问题描述】:

我有一个具有以下数据结构的数据框:

x <- c("A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "C", "C", "C", "C", "C", "C", "C", "C", "C")
y <- c("Y", "Y", "Y", "Y", "N", "N", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "N", "Y", "Y", "Y", "N", "Y", "Y")
df <- data.frame(x, y) 

我想使用 dplyr 创建一个新列,其中“y”列中每个 Y 块的唯一值和“y”中每个 N 的值,按“x”分组。例如:

z <- c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 3, 3)
df <- data.frame(x, y, z)

我该怎么做?

我尝试修改此问题的答案How to assign a unique ID number to each group of identical values in a column 无济于事。

【问题讨论】:

    标签: r dplyr grouping


    【解决方案1】:

    在下面的代码中,当x == C 时,我可以生成相同的输出,但是当x == A 时,输出与您的示例不同。我想知道您的示例输出是否存在一些问题,因为 AC 似乎基于不同的规则。请验证您使用的是什么规则。

    library(dplyr)
    
    df2 <- df %>%
      group_by(x) %>%
      mutate(z = lag(cumsum(y %in% "N"), default = 0) + 1) %>%
      mutate(z = ifelse(z == 0, z + 1, z)) %>%
      ungroup()
    df2
    # # A tibble: 20 x 3
    #    x     y         z
    #    <chr> <chr> <dbl>
    #  1 A     Y         1
    #  2 A     Y         1
    #  3 A     Y         1
    #  4 A     Y         1
    #  5 A     N         1
    #  6 A     N         2
    #  7 A     Y         3
    #  8 A     Y         3
    #  9 A     Y         3
    # 10 A     Y         3
    # 11 A     Y         3
    # 12 C     Y         1
    # 13 C     Y         1
    # 14 C     N         1
    # 15 C     Y         2
    # 16 C     Y         2
    # 17 C     Y         2
    # 18 C     N         2
    # 19 C     Y         3
    # 20 C     Y         3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      相关资源
      最近更新 更多