【问题标题】:Creating serial numbers based on a group unique id in 2 columns [duplicate]根据2列中的组唯一ID创建序列号[重复]
【发布时间】:2020-10-01 15:14:24
【问题描述】:

我有这个数据

cluster<-c(1,1,1,1,2,2,2,2)
structure<-c(1,1,2,3,1,1,1,2)
str<-data.frame(clusters,structures)

我想根据集群和结构创建名为序列号的第三列。这是我得到以下输出的方式

serial.number<-c(1,2,1,1,1,2,3,1)
str2<-data.frame(cluster,structure,serial.number)

谢谢

【问题讨论】:

  • str$serial.number

标签: r serialization group-by dplyr


【解决方案1】:

使用dplyr

library(dplyr)
df %>%
      group_by(cluster, structure) %>%
      mutate(serial.number = row_number())

data.table

library(data.table)
setDT(df)[, serial.number := rowid(cluster, structure)]

【讨论】:

    【解决方案2】:

    如果您使用基础 R,请尝试 ave + seq_along

    within(str, serial.number <- ave(structure,cluster,FUN = seq_along))
    

    【讨论】:

      【解决方案3】:

      我猜你正在寻找这个:

      library(data.table)
      df <- setDT(str)
      df[, serial.number := seq(.N), by = .(cluster,structure)] 
      

      【讨论】:

      • 完美运行,但是否有替代方案,无需使用 data.table?
      • 可能有替代方案,但我故意使用数据表。您是否有不想使用数据表的原因?
      猜你喜欢
      • 1970-01-01
      • 2023-02-25
      • 2012-02-20
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多