我正在尝试在数据框中创建一个新变量(创建一个新列)。每个观察值的计算值都不同,所以我用它来循环。假设我试图添加到数据框REPLIC
的新变量称为PL
REPLIC$PL <- for (i in 1:ncol(REPLIC)) if (REPLIC$FTR[i]=="D") { REPLIC$PL[i] <- REPLIC$f_of_bet[i]*starting_budget*REPLIC$max[i])} else { REPLIC$PL[i] <- REPLIC$f_of_bet[i]*starting_budget*-1}
我也尝试过使用mutate
REPLIC <- mutate(REPLIC, PL = for loop goes here)
还尝试了应用功能
REPLIC$PL <- apply(REPLIC,1, for loop here)
我是R的新手,我真的没有得到我在这里缺少的东西。到目前为止,我唯一能够管理的是在全球环境中创建PL
值。如果有人能指导我,我会很高兴。
答案 0 :(得分:0)
这里不需要使用循环,一切都可以使用向量完成。 既然你没有分享关于你的数据的任何信息,我不得不作出一些假设,如果这些是错误的,请纠正我。
#create fake data
starting_budget <- 1000
REPLIC <- data.frame(FTR = c(rep('D',5),rep('A',5)),f_of_bet = runif(10),max=runif(10))
> REPLIC
FTR f_of_bet max
1 D 0.78590664 0.3620227
2 D 0.15498935 0.4921082
3 D 0.20469729 0.5597419
4 D 0.01167919 0.3677215
5 D 0.32862533 0.5531767
6 A 0.52029750 0.5391566
7 A 0.63206626 0.9727405
8 A 0.54632605 0.7221810
9 A 0.58939969 0.6103260
10 A 0.15375445 0.1996567
以下代码将添加您的新列。我正在使用ifelse
,因为FTR
上有条件:
REPLIC$PL <- ifelse(REPLIC$FTR == 'D',
REPLIC$f_of_bet * starting_budget * REPLIC$max,
REPLIC$f_of_bet * starting_budget * -1)
这会给你:
> REPLIC
FTR f_of_bet max PL
1 D 0.78590664 0.3620227 284.51602
2 D 0.15498935 0.4921082 76.27153
3 D 0.20469729 0.5597419 114.57764
4 D 0.01167919 0.3677215 4.29469
5 D 0.32862533 0.5531767 181.78787
6 A 0.52029750 0.5391566 -520.29750
7 A 0.63206626 0.9727405 -632.06626
8 A 0.54632605 0.7221810 -546.32605
9 A 0.58939969 0.6103260 -589.39969
10 A 0.15375445 0.1996567 -153.75445