【问题标题】:Create a new column with data.table that count unique values使用计算唯一值的 data.table 创建一个新列
【发布时间】:2021-12-26 03:21:36
【问题描述】:
ID
1
1
2
3
3
3
3

我想用数据表创建一个额外的列,计算唯一的 1、2、3 等并将它们汇总。最终的 dat.table 将是

ID CountID
1 2
1 2
2 1
3 4
3 4
3 4
3 4

我正在尝试,但不起作用:

df[, CountID := uniqueN(df, by = ID)]

【问题讨论】:

    标签: r data.table calculated-columns


    【解决方案1】:

    数据表

    您可以为此使用.N

    library(data.table)
    DT[, CountID := .N, by = ID]
    DT
    #       ID CountID
    #    <int>   <int>
    # 1:     1       2
    # 2:     1       2
    # 3:     2       1
    # 4:     3       4
    # 5:     3       4
    # 6:     3       4
    # 7:     3       4
    

    基础 R

    DT$CountID2 <- ave(rep(1L, nrow(DT)), DT$ID, FUN = length)
    

    数据

    DT <- setDT(structure(list(ID = c(1L, 1L, 2L, 3L, 3L, 3L, 3L), CountID = c(2L, 2L, 1L, 4L, 4L, 4L, 4L)), class = c("data.table", "data.frame"), row.names = c(NA, -7L)))
    

    【讨论】:

      【解决方案2】:

      使用dplyr

      df1 = group_by(df, id) %>% count()
      merge(df, df1)
         id n
      1   1 3
      2   1 3
      3   1 3
      4   2 1
      5   3 4
      6   3 4
      7   3 4
      8   3 4
      9   4 2
      10  4 2
      

      数据

      df = data.frame('id' = c( 1  , 1  , 1, 2, 3, 3, 3, 3, 4, 4))
      

      【讨论】:

      • 我可以使用 data.table 和 := 符号吗?
      • 不精通data.table
      猜你喜欢
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 2020-10-11
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      相关资源
      最近更新 更多