将累积值转换为单个值:如何使结果首值为1而非0?
解决累积值转单个值时首个值为0的问题
我懂你的需求啦~你现在用x - lag(x, default = first(x))得到的首个值是0,是因为lag(x, default = first(x))的第一个元素就是x的第一个值(也就是1),1减1自然是0。要把它改成1,有几种简单的办法:
方法1:调整lag的默认值
直接把default设为0就行,这样第一个元素就是x[1] - 0 = 1,后面的计算逻辑不变:
x <- cumsum(1:10) x - lag(x, default = 0)
运行结果:
1 2 3 4 5 6 7 8 9 10
方法2:用diff函数补首个值
diff(x)会计算相邻元素的差值(也就是你要的单个值,除了第一个),然后把1补在最前面就好:
x <- cumsum(1:10) c(1, diff(x))
这个方法逻辑更直观,因为累积值的第一个单个值本来就是1,后面的差值直接用diff就能得到。
方法3:直接修改结果的首个元素
如果不想改原计算逻辑,也可以先得到带0的结果,再手动把第一个元素换成1:
x <- cumsum(1:10) res <- x - lag(x, default = first(x)) res[1] <- 1 res
同样能得到你想要的结果。
这几种方法都能解决问题,选你觉得最顺手的就行~
内容的提问来源于stack exchange,提问作者89_Simple
相关产品推荐
相关产品推荐

