r - 在 R Data.Table 中创建一个计数器列,在另一列上有一个条件
问题描述
我试图计算自有记录以来产品提供的年数。
在下面的示例中,我想在记录的第一个非零销售额处启动计数器。
请注意,在接下来的几年中,我的销售记录可能为零,但计数器应将这些年视为有效。
我尝试过rleid
,但无法找出区分初始 0 与寿命内 0 的方法。
tt <- data.table(YEAR=2007:2018,
SALES=c(0,0,0,2,3,5,1,0,9,0,3,4),
YEARS_IN=c(0,0,0,1,2,3,4,5,6,7,8,9))
> tt
YEAR SALES YEARS_IN
1: 2007 0 0
2: 2008 0 0
3: 2009 0 0
4: 2010 2 1
5: 2011 3 2
6: 2012 5 3
7: 2013 1 4
8: 2014 0 5
9: 2015 9 6
10: 2016 0 7
11: 2017 3 8
12: 2018 4 9
解决方案
这是使用基础 R 的单行解决方案 -
tt <- data.table::data.table(YEAR=2007:2018,
SALES=c(0,0,0,2,3,5,1,0,9,0,3,4),
YEARS_IN=c(0,0,0,1,2,3,4,5,6,7,8,9))
tt$Calc_Years <- cumsum(cumsum(tt$SALES) > 0)
tt
YEAR SALES YEARS_IN Calc_Years
1: 2007 0 0 0
2: 2008 0 0 0
3: 2009 0 0 0
4: 2010 2 1 1
5: 2011 3 2 2
6: 2012 5 3 3
7: 2013 1 4 4
8: 2014 0 5 5
9: 2015 9 6 6
10: 2016 0 7 7
11: 2017 3 8 8
12: 2018 4 9 9
感谢西蒙,这是一个data.table
版本-
tt[ , Calc_Years := cumsum(cumsum(SALES) > 0)]
推荐阅读
- python - 大型数据集的变革问题
- bigcommerce - 在大型商业中是否可以拥有自定义内容类型?
- android - 打开杀死的活动后导航导致崩溃
- python - 在python中生成列表的随机颜色
- typescript - vue类组件继承,来自基类的方法“不是函数”
- c# - 带有 WPF/C# 问题的 System.Threading.Timer
- linux - ffmpeg 硬件解码/编码转码
- java - 使用 JPA 的 Helidon 无法使用外部配置 (application.yaml)
- reactjs - 安装路由器后,Chrome 显示我的 React 应用程序出现奇怪的错误
- sql - Bigquery 更新/插入嵌套数组和结构数组