将值设置为新变量

时间:2017-07-14 10:24:22

标签: r dataframe

我正在尝试在数据框中创建一个新变量(创建一个新列)。每个观察值的计算值都不同,所以我用它来循环。假设我试图添加到数据框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值。如果有人能指导我,我会很高兴。

1 个答案:

答案 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