【问题标题】:Count Dates (in order) by ID [in R] [duplicate]按 ID [in R] [重复] 计算日期(按顺序)
【发布时间】:2019-07-22 10:38:02
【问题描述】:

我想计算一个按客户日期计算订单的列。

这里有一些玩具代码:

Date <- as.Date(c('2006-08-30','2006-08-23', '2006-09-06', '2006-09-13', '2006-09-20')) 
ID <- c("x1","x1","X2","X3","x1") 
TransNo<-c("123","124","125","126","127")

df<-data.frame(ID,Date,TransNo) 

我的预期结果如下所示,其中“Times”是所需的变量:

ID       Date TransNo Times
1 x1 2006-08-30     123     2
2 x1 2006-08-23     124     1
3 X2 2006-09-06     125     1
4 X3 2006-09-13     126     1
5 x1 2006-09-20     127     3

我尝试了一些带有 count / n 或长度的聚合和 dplyr 解决方案。不确定是什么解决了这个问题,但它不可能是火箭科学。

任何帮助都会很棒! 先谢谢大家了

【问题讨论】:

  • df %&gt;% mutate(ord=1:n()) %&gt;% arrange(Date) %&gt;% group_by(ID) %&gt;% mutate(n=1:n()) %&gt;% arrange(ord) %&gt;% select(-ord)
  • 嗨,这会引发错误。错误:n() 只能在数据上下文中调用
  • df %&gt;% arrange(Date) %&gt;% group_by(ID) %&gt;% mutate(n = row_number())
  • Ronak,谢谢你,但同样的错误:错误:row_number() 只能在数据上下文中调用
  • 这两种结构都是正确的。试试dplyr::n()dplyr::row_number()

标签: r count dplyr aggregate


【解决方案1】:

这是你想要的吗?

df<-data.frame(ID,Date,TransNo) %>%
  arrange(Date) %>%
  group_by(ID) %>%
  mutate(dummy = 1) %>%
  mutate(times = cumsum(dummy)) %>%
  select(-dummy)

返回

 ID    Date       TransNo times
  <fct> <date>     <fct>   <dbl>
1 x1    2006-08-23 124         1
2 x1    2006-08-30 123         2
3 X2    2006-09-06 125         1
4 X3    2006-09-13 126         1
5 x1    2006-09-20 127         3

【讨论】:

  • 谢谢 nogbad,但它从 1 计数到 n,而不是每个 ID 和 TransNo
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
相关资源
最近更新 更多