Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
data.table或dplyr-数据操作_R_Data.table_Plyr_Data Manipulation_Dplyr - Fatal编程技术网

data.table或dplyr-数据操作

data.table或dplyr-数据操作,r,data.table,plyr,data-manipulation,dplyr,R,Data.table,Plyr,Data Manipulation,Dplyr,我有以下数据 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-0

我有以下数据

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

使用ddply和duplicated,您只需

df <- ddply(data, .(Date, Col1), nrow)
df2 <- ddply(df[!duplicated(df$Col1),], .(Date), nrow)
ddply(df2, .(Date, V1), nrow)
df
library(dplyr)
df%。%
安排(日期)%。%
筛选器(!重复(Col1))%。%
分组单位(日期)%.%
总结(计数=n())%。%n()长度(日期)
突变(计数=累积和(计数))
#来源:本地数据帧[3 x 2]
# 
#日期计数
# 1 2014-01-01     3
# 2 2014-01-02     5
# 3 2014-01-03     6
库(数据表)

我要找的输出是上面显示的日期和计数列。太好了!非常感谢。我更喜欢data.table选项。谢谢@Arun。我不太熟悉数据表。但我开始喜欢它了使用
filter
col1
上消除重复可能更有效(在
dplyr
中),即
df%。%arrange(Date)%。%filter(!duplicated(col1))%。%group_by(Date)%。%summary(Count=length(Date))%。%mutate(Count=cumsum(Count))
。我支持@mnel-如果您一直使用
%,dplyr代码会看起来更好。%%
@mnel使用
n()
而不是
长度
可能也会更好。cc@hadley
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)]