作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下数据集:
DT <- fread(" df1 df2
1 8
2 9
3 10
4 11
5 12")
df3
第一个值等于 100,然后是
lag(df3, 1) * (1 + df2)
.所以最终输出将是:
df1 df2 df3
1 1 8 100
2 2 9 1000
3 3 10 11000
4 4 11 132000
5 5 12 1716000
DT[,df3 := lag(df3, 1) * (1 + df2)]
但因为
df3
尚不存在,所以我收到一个错误。
最佳答案
我将之前的答案留在下面,因为它取得了一些成功,但我忽略了使用 cumprod
会快得多。 :
DT$df3 <- 100 * cumprod(c(0,DT$df2[-1])+1) # base R
DT[, df3:= 100 * cumprod(c(0,df2[-1])+1)] # data.table
DT %>% mutate(df3 = 100 * cumprod(c(0,df2[-1])+1)) # tidyverse (only dplyr here)
df2+1
的累积乘积,忽略第一个元素并以
1
开头,然后乘以
100
.
Reduce
:
Reduce
来说是个好工作,我们使用的函数是简单的乘法,然后我们确保:
1
至 df2
并忽略第一个值。 accumulate = TRUE
) DT$df3 <- Reduce(`*`,DT$df2[-1]+1,init = 100,accumulate = TRUE)
DT
# df1 df2 df3
# 1: 1 8 100
# 2: 2 9 1000
# 3: 3 10 11000
# 4: 4 11 132000
# 5: 5 12 1716000
R
, 与
data.table
一起使用更惯用的语法可以按照@jogo 的建议写:
DT[, df3:=Reduce('*', df2[-1]+1, init = 100,accumulate = TRUE)]
tidyverse
道路:
library(tidyverse)
DT %>% mutate(df3 = accumulate(df2[-1]+1,`*`,.init = 100))
关于r - 根据尚不存在的列创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50699826/
我需要面对一个架构/设计决策。 我正在开发一个 Cordova/Meteor 应用程序,它具有独特的入门体验。新用户会看到一个向导,引导他们完成填写某些表单的步骤。 向导流程会等到最后一步才能注册用户
我想通过 psql 在空数据库中加载一些 SQL 函数: psql -d my_database -f fuctions.sql --set ON_ERROR_STOP=1 我使用 --set ON_
我是一名优秀的程序员,十分优秀!