【问题标题】:How to create a new column that consecutively sums from another column in R?如何创建一个从 R 中的另一列连续求和的新列?
【发布时间】:2020-01-21 03:27:39
【问题描述】:

我有一个包含 3 列的数据表:customer_id、time_period 和购买的cookies(如果不是,则为 0,如果是,则为 1)。我想创建一个新列 (total_number_cookie_buyers) 来汇总之前购买的饼干的行,以查看到该时间点有多少人购买了饼干(例如,如果购买饼干的前三行是 0、1、0,那么中的值total_number_cookie_buyers 的第三行是 1)。我试过谷歌搜索,但找不到任何关于如何做到这一点的信息!

【问题讨论】:

  • make this question reproducible 以纯文本格式包含一些示例数据。
  • 查看“zoo”包中的“rollapply”功能。这是对数据框进行累积计算的一种方便易用的方法。
  • 也许你只需要 cumsum 分组。如果你有data.table 这样的东西应该可以工作,dt[, total_number_cookie_buyers := cumsum(bought_cookies), customer_id] 或者只是dt[, total_number_cookie_buyers := cumsum(bought_cookies)]

标签: r dataframe data-manipulation


【解决方案1】:

您正在寻找的方法称为累积和。 我认为这是解决方案。

cust_id <- NULL
 for(i in 1:21){
  if(i<10){ k <- paste("ID_00",i,sep="") } else{
    k <- paste("ID_0",i,sep="") }
  cust_id[i] <- k 
}
date <- sample(seq(as.Date('2020/01/01'), as.Date('2020/01/21'), by="day"), 21)
date <- date[order(date)]
sales <- rbinom(21,1,0.5)
df <- data.frame(cust_id=cust_id,date=date,sales=sales)
df$salesydate <- cumsum(df$sales)

cust_id 日期销售 salesdate

1 ID_001 2020-01-01 0 0

2 ID_002 2020-01-02 0 0

3 ID_003 2020-01-03 0 0

4 ID_004 2020-01-04 1 1

5 ID_005 2020-01-05 1 2

6 ID_006 2020-01-06 0 2

7 ID_007 2020-01-07 1 3

.......................

【讨论】:

  • 解决方案真的只有最后一行代码df$salesydate &lt;- cumsum(df$sales),剩下的只是构建一个示例数据集。您应该将两者分开并标记它们,以便初学者知道哪个是哪个。
猜你喜欢
  • 1970-01-01
  • 2018-03-29
  • 2022-09-30
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多