gpt4 book ai didi

r - 涉及数据框中相互依赖列的计算

转载 作者:行者123 更新时间:2023-12-01 13:15:43 25 4
gpt4 key购买 nike

Data <- data.frame(
A = rnorm(1:10),
B = rnorm(1:10),
C = rnorm(1:10),
D = rnorm(1:10),
X = sample(c(1,0), size=10, replace = TRUE)
)

在 Data 数据框中,我需要创建两列 Y 和 Z

Y 的第一个观察值将等于一个常数,比方说 10

Y 的第二次和后续观察,即在这种情况下从第 2 行到第 10 行将等于 = 10 + Z[previous observation]

例子

if Z[1] = 10 then Y[2] = 10 + Z[1] = 20

if Z[2] = 20 then Y[3] = 10 + Z[2] = 30

if Z[3] = 50 then Y[4] = 10 + Z[3] = 60

依此类推,直到Data数据帧的长度。


现在就 Z 而言,它的计算如下:

First observation of Z is IF(X1>0,0,Y1-SUM(A1+B1+C1+D1))
Second observation of Z is IF(X2>0,0,Y2-SUM(A2+B2+C2+D2))
Third observation of Z is IF(X3>0,0,Y3-SUM(A3+B3+C3+D3))

即它检查来自同一行的 X 观察值是否 > 0 那么该行的 Z 是否为 0 否则它是同一行的 Y1 - sum(A:D)

依此类推,直到数据帧的长度。

最佳答案

由于前一行的每一行都存在相互依赖关系,因此在此处使用 for 循环

Data$Y <- 10
Data$Z <- 0

for (i in seq_len(nrow(Data))) {
if(i > 1)
Data$Y[i] <- Data$Y[1] + Data$Z[i-1]

if(Data$X[i] > 0)
Data$Z[i] <- 0
else
Data$Z[i] <- with(Data, Y[i] - (A[i]+B[i]+C[i]+D[i]))
}

Data
# A B C D X Y Z
#1 0.6607697 0.05785971 0.2053518 -0.3366816 0 10.00000 9.412700
#2 -2.0529830 1.10397550 1.0162833 -0.6592560 0 19.41270 20.004681
#3 -1.4992061 -0.02561697 0.4089990 -0.1007670 1 30.00468 0.000000
#4 1.4712331 0.51484639 -0.7052355 0.7039078 0 10.00000 8.015248
#5 1.4591385 0.99005668 0.2356143 0.4380549 0 18.01525 14.892384
#6 0.1401390 0.30345432 0.3451300 1.4971479 0 24.89238 22.606512
#7 0.2091844 -0.93007223 -1.0197996 0.2162444 1 32.60651 0.000000
#8 -3.0360898 0.08403068 -1.4118223 -1.4953378 0 10.00000 15.859219
#9 -0.4869341 0.52677963 -1.3638423 0.1249940 1 25.85922 0.000000
#10 -1.0878673 0.01586862 0.8731049 -1.0380945 0 10.00000 11.236988

数据

set.seed(234)
Data <- data.frame(
A = rnorm(1:10),
B = rnorm(1:10),
C = rnorm(1:10),
D = rnorm(1:10),
X = sample(c(1,0), size=10, replace = TRUE)
)

关于r - 涉及数据框中相互依赖列的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55311750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com