首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与前一个元素计算差异,并有一个定义的起点

与前一个元素计算差异,并有一个定义的起点
EN

Stack Overflow用户
提问于 2022-01-01 12:03:04
回答 3查看 66关注 0票数 -1

假设我们有以下df

代码语言:javascript
复制
  df =  structure(list(fruit = c("melon", "mango", "orange", "blueberry"
    ), pct = c(5, 4, 3, 2)), class = "data.frame", row.names = c(NA, 
    -4L))

看起来是这样的:

代码语言:javascript
复制
      fruit pct
1     melon   5
2     mango   4
3    orange   3
4 blueberry   2

我想从一个给定的数字开始,比方说30,我想以这种方式浏览pct计算的差异栏:

代码语言:javascript
复制
     fruit pct desired_output
1     melon   5  30
2     mango   4  30-5=25
3    orange   3  25-4=21
4 blueberry   2  21-3=19

请注意,这些差异是通过向量中的前一个元素来完成的,并且有一个起点,在本例中我将其定义为30

我尝试过像diffcumsum这样的函数,但是我没有得到想要的输出。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-01-01 12:45:41

新年快乐!这里有一个细微的变化

代码语言:javascript
复制
starting_point=30

df_new<-df %>%
  mutate(interim=lag(cumsum(pct))) %>%
  mutate(desired_output= starting_point-interim)

df_new$desired_output[1]=starting_point
票数 2
EN

Stack Overflow用户

发布于 2022-01-01 14:37:49

请在下面找到一个稍微简单一些的解决方案,只有base R

  • Code

代码语言:javascript
复制
x <- 30
df$desired_output <- replace(x - lag(cumsum(df$pct)), 1, x)

  • Output

代码语言:javascript
复制
df
#>      fruit pct desired_output
#>1     melon   5             30
#>2     mango   4             25
#>3    orange   3             21
#>4 blueberry   2             18
票数 1
EN

Stack Overflow用户

发布于 2022-01-01 14:46:46

使用数据表:

数据:

代码语言:javascript
复制
df = structure(list(fruit = c("melon", "mango", "orange", "blueberry"
), pct = c(5, 4, 3, 2)), row.names = c(NA, -4L), class = c("data.table", 
"data.frame"), .internal.selfref = <pointer: 0x56485756c100>)

代码:

代码语言:javascript
复制
starting_point =  30
df[,cmsum:=starting_point-cumsum(c(0,pct[-length(pct)]))]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70548756

复制
相关文章

相似问题

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