假设我们有以下df
df = structure(list(fruit = c("melon", "mango", "orange", "blueberry"
), pct = c(5, 4, 3, 2)), class = "data.frame", row.names = c(NA,
-4L))看起来是这样的:
fruit pct
1 melon 5
2 mango 4
3 orange 3
4 blueberry 2我想从一个给定的数字开始,比方说30,我想以这种方式浏览pct计算的差异栏:
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。
我尝试过像diff和cumsum这样的函数,但是我没有得到想要的输出。
发布于 2022-01-01 12:45:41
新年快乐!这里有一个细微的变化
starting_point=30
df_new<-df %>%
mutate(interim=lag(cumsum(pct))) %>%
mutate(desired_output= starting_point-interim)
df_new$desired_output[1]=starting_point发布于 2022-01-01 14:37:49
请在下面找到一个稍微简单一些的解决方案,只有base R
x <- 30
df$desired_output <- replace(x - lag(cumsum(df$pct)), 1, x)df
#> fruit pct desired_output
#>1 melon 5 30
#>2 mango 4 25
#>3 orange 3 21
#>4 blueberry 2 18发布于 2022-01-01 14:46:46
使用数据表:
数据:
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>)代码:
starting_point = 30
df[,cmsum:=starting_point-cumsum(c(0,pct[-length(pct)]))]https://stackoverflow.com/questions/70548756
复制相似问题