首页 文章

data.table或dplyr - 数据操作

提问于
浏览
6

我有以下数据

Date           Col1       Col2
2014-01-01     123        12
2014-01-01     123        21
2014-01-01     124        32
2014-01-01     125        32
2014-01-02     123        34
2014-01-02     126        24
2014-01-02     127        23
2014-01-03     521        21
2014-01-03     123        13
2014-01-03     126        15

现在,我想计算 Col1 中每个日期的唯一值(在前一个日期没有重复),并添加到先前的计数 . 例如,

Date           Count
2014-01-01       3 i.e. 123,124,125
2014-01-02       5 (2 + above 3) i.e. 126, 127
2014-01-03       6 (1 + above 5) i.e. 521 only

2 回答

  • 0
    library(dplyr)
    df %.% 
      arrange(Date) %.% 
      filter(!duplicated(Col1)) %.% 
      group_by(Date) %.% 
      summarise(Count=n()) %.% # n() <=> length(Date)
      mutate(Count = cumsum(Count))
    # Source: local data frame [3 x 2]
    # 
    #         Date Count
    # 1 2014-01-01     3
    # 2 2014-01-02     5
    # 3 2014-01-03     6
    
    library(data.table)
    dt <- data.table(df, key="Date")
    dt <- unique(dt, by="Col1")
    (dt <- dt[, list(Count=.N), by=Date][, Count:=cumsum(Count)])
    #          Date Count
    # 1: 2014-01-01     3
    # 2: 2014-01-02     5
    # 3: 2014-01-03     6
    

    要么

    dt <- data.table(df, key="Date")
    dt <- unique(dt, by="Col1")
    dt[, .N, by=Date][, Count:=cumsum(N)]
    

    .N 在此类链接操作中自动命名为 N (无点),因此如果需要,您可以在下一个操作中同时使用 .NN .

  • 17

    使用ddply和duplicated,你只需要这样做

    df <- ddply(data, .(Date, Col1), nrow)
    df2 <- ddply(df[!duplicated(df$Col1),], .(Date), nrow)
    ddply(df2, .(Date, V1), nrow)
    

    即你首先计算所有夫妇日期,Col1,然后你删除重复的列 . 你终于统计了colums .

    您的数据必须先排序 .

相关问题