首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >data.table或dplyr -数据操作

data.table或dplyr -数据操作
EN

Stack Overflow用户
提问于 2014-01-28 21:10:48
回答 2查看 2.8K关注 0票数 6

我有以下数据

代码语言:javascript
运行
复制
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中为每个日期(在前一个日期中没有重复)计数唯一值,并添加到前面的计数中。例如,

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-28 21:43:35

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
dt <- data.table(df, key="Date")
dt <- unique(dt, by="Col1")
dt[, .N, by=Date][, Count:=cumsum(N)]

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

票数 17
EN

Stack Overflow用户

发布于 2014-01-28 21:38:56

在蹒跚学步和复制,你只需要做

代码语言:javascript
运行
复制
df <- ddply(data, .(Date, Col1), nrow)
df2 <- ddply(df[!duplicated(df$Col1),], .(Date), nrow)
ddply(df2, .(Date, V1), nrow)

你先计算所有的情侣约会,Col1,然后删除重复的列。你终于数到专栏了。

您的数据必须在之前进行排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21416918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档