data.table或dplyr - 数据操作

Big*_*ist 6 r data-manipulation plyr dplyr data.table

我有以下数据

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
Run Code Online (Sandbox Code Playgroud)

现在,我想计算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
Run Code Online (Sandbox Code Playgroud)

luk*_*keA 17

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
Run Code Online (Sandbox Code Playgroud)

要么

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

.N被命名为N(无点)为方便在这样的链接操作自动完成,因此您可以同时使用.NN如果需要的话,在未来的操作在一起.

  • 大!谢谢.我更喜欢data.table选项. (8认同)
  • 谢谢@Arun.我对数据表很新.但我开始喜欢它了.:) (2认同)
  • 在`dplyr`中使用`filter`来重复写'col1`可能更有效,即'df%.%arrange(Date)%.%filter(!duplicated(Col1))%.%group_by (日期)%.%汇总(Count = length(Date))%.%mutate(Count = cumsum(count))`. (2认同)