连续乘法同列前值
Continuous multiplication same column previous value
我有问题。
我有以下数据框。
1
2
NA
100
1.00499
NA
1.00813
NA
0.99203
NA
两列。在第二列中,除了起始值之外,只有 NA。我想通过将第 2 列的第一个值乘以第 1 列的第二个值 (100* 1.00499) 来填充第 2 列的第一个 NA。第 2 列的第 3 个值应该是第 2 列中的第 2 个新创建值与第 1 列中的第 3 个值的乘积,依此类推。这样最后 NA 就会被值替换。
这两个来源帮助我理解了如何引用不同的行。但是在这两种情况下,新列都是 created.I 不想要的。我想填写已经存在的第 2 列。
Use a value from the previous row in an R data.table calculation
https://statisticsglobe.com/use-previous-row-of-data-table-in-r
谁能帮帮我?
提前致谢。
示例代码
library(quantmod)
data.N225<-getSymbols("^N225",from="1965-01-01", to="2022-03-30", auto.assign=FALSE, src='yahoo')
data.N225[c(1:3, nrow(data.N225)),]
data.N225<- na.omit(data.N225)
N225 <- data.N225[,6]
N225$DiskreteRendite= Delt(N225$N225.Adjusted)
N225[c(1:3,nrow(N225)),]
options(digits=5)
N225.diskret <- N225[,3]
N225.diskret[c(1:3,nrow(N225.diskret)),]
N225$diskretplus1 <- N225$DiskreteRendite+1
N225[c(1:3,nrow(N225)),]
library(dplyr)
N225$normiert <-"Value"
N225$normiert[1,] <-100
N225[c(1:3,nrow(N225)),]
N225.new <- N225[,4:5]
N225.new[c(1:3,nrow(N225.new)),]
这是在 R studio 中创建数据框的代码。
a <- c(NA, 1.0050,1.0081, 1.0095, 1.0016,0.9947)
b <- c(100, NA, NA, NA, NA, NA)
c<- data.frame(ONE = a, TWO=b)
for 循环 怎么样?
(我将为您的数据框使用 dat
而不是 c
以避免与函数 c()
混淆)。
for (row in 2:nrow(dat)) {
if (!is.na(dat$TWO[row-1])) {
dat$TWO[row] <- dat$ONE[row] * dat$TWO[row-1]
}
}
这意味着:
对于从第二行到末尾的每一行,如果前一行的TWO
不是缺失值,则计算本行的TWO
,乘以当前行的ONE
和TWO
来自上一行。
输出:
#> ONE TWO
#> 1 NA 100.0000
#> 2 1.0050 100.5000
#> 3 1.0081 101.3140
#> 4 1.0095 102.2765
#> 5 1.0016 102.4402
#> 6 0.9947 101.8972
由 reprex package (v2.0.1)
于 2022-04-28 创建
我很想阅读 dplyr
解决方案!
您可以使用 cumprod
作为累积产品
transform(
df,
TWO = cumprod(c(na.omit(TWO),na.omit(ONE)))
)
产生
ONE TWO
1 NA 100.0000
2 1.0050 100.5000
3 1.0081 101.3140
4 1.0095 102.2765
5 1.0016 102.4402
6 0.9947 101.8972
数据
> dput(df)
structure(list(ONE = c(NA, 1.005, 1.0081, 1.0095, 1.0016, 0.9947
), TWO = c(100, NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA,
-6L))
我有问题。 我有以下数据框。
1 | 2 |
---|---|
NA | 100 |
1.00499 | NA |
1.00813 | NA |
0.99203 | NA |
两列。在第二列中,除了起始值之外,只有 NA。我想通过将第 2 列的第一个值乘以第 1 列的第二个值 (100* 1.00499) 来填充第 2 列的第一个 NA。第 2 列的第 3 个值应该是第 2 列中的第 2 个新创建值与第 1 列中的第 3 个值的乘积,依此类推。这样最后 NA 就会被值替换。
这两个来源帮助我理解了如何引用不同的行。但是在这两种情况下,新列都是 created.I 不想要的。我想填写已经存在的第 2 列。
Use a value from the previous row in an R data.table calculation
https://statisticsglobe.com/use-previous-row-of-data-table-in-r
谁能帮帮我?
提前致谢。
示例代码
library(quantmod)
data.N225<-getSymbols("^N225",from="1965-01-01", to="2022-03-30", auto.assign=FALSE, src='yahoo')
data.N225[c(1:3, nrow(data.N225)),]
data.N225<- na.omit(data.N225)
N225 <- data.N225[,6]
N225$DiskreteRendite= Delt(N225$N225.Adjusted)
N225[c(1:3,nrow(N225)),]
options(digits=5)
N225.diskret <- N225[,3]
N225.diskret[c(1:3,nrow(N225.diskret)),]
N225$diskretplus1 <- N225$DiskreteRendite+1
N225[c(1:3,nrow(N225)),]
library(dplyr)
N225$normiert <-"Value"
N225$normiert[1,] <-100
N225[c(1:3,nrow(N225)),]
N225.new <- N225[,4:5]
N225.new[c(1:3,nrow(N225.new)),]
这是在 R studio 中创建数据框的代码。
a <- c(NA, 1.0050,1.0081, 1.0095, 1.0016,0.9947)
b <- c(100, NA, NA, NA, NA, NA)
c<- data.frame(ONE = a, TWO=b)
for 循环 怎么样?
(我将为您的数据框使用 dat
而不是 c
以避免与函数 c()
混淆)。
for (row in 2:nrow(dat)) {
if (!is.na(dat$TWO[row-1])) {
dat$TWO[row] <- dat$ONE[row] * dat$TWO[row-1]
}
}
这意味着:
对于从第二行到末尾的每一行,如果前一行的TWO
不是缺失值,则计算本行的TWO
,乘以当前行的ONE
和TWO
来自上一行。
输出:
#> ONE TWO
#> 1 NA 100.0000
#> 2 1.0050 100.5000
#> 3 1.0081 101.3140
#> 4 1.0095 102.2765
#> 5 1.0016 102.4402
#> 6 0.9947 101.8972
由 reprex package (v2.0.1)
于 2022-04-28 创建我很想阅读 dplyr
解决方案!
您可以使用 cumprod
作为累积产品
transform(
df,
TWO = cumprod(c(na.omit(TWO),na.omit(ONE)))
)
产生
ONE TWO
1 NA 100.0000
2 1.0050 100.5000
3 1.0081 101.3140
4 1.0095 102.2765
5 1.0016 102.4402
6 0.9947 101.8972
数据
> dput(df)
structure(list(ONE = c(NA, 1.005, 1.0081, 1.0095, 1.0016, 0.9947
), TWO = c(100, NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA,
-6L))