R数据框中两个值的更改

问题描述 投票:-1回答:1

最初,我有前四列。第一轮和回合2有两名球员A和B。每轮最高得分为1。

在第五列(我想获得)中,我希望第二轮选手A与初始得分1相比有多少改变(得分变化)。

这样,在第三行中,对于第二轮,B具有0.855,而A具有(1-0.855)= 0.145。其中,A从初始得分的变化是-0.855。

enter image description here

示例数据是由此生成的:'''

set.seed(123)
Round1 <- sample("A", size=10, replace = T, prob = NULL)
Score1 <- sample(seq(0.71,1,length.out = 3), size=10, replace = T, prob = NULL)
Score2 <- sample(seq(0.71,1,length.out = 3),size = 10, replace = T)
Round2 <- sample(LETTERS[1:2],size = 10,replace = T)
d <- data.frame(Round1,Score1,Round2,Score2)

有人可以帮助我更好地写作吗?我尝试了这个,但并没有真正给出我期望的结果:

d$Alteration <- ifelse(d$Round1==d$Round2, -1*(d$Score1-d$Score2),ifelse(d$Round1!=d$Round2 & d$Score2==1, -1+d$Score1, -1*d$Score2))
r dataframe comparison string-comparison
1个回答
0
投票
为了获得来自score1的更改,我仅使用ifelse函数创建两个中间列。如果round1和round2具有相同的值,则col A用于score2。如果round1和round2具有不同的值,则col B是Round2中A的当前得分。然后,计算A从得分1到得分2的变化,如下:

set.seed(123) Round1 <- sample("A", size=10, replace = T, prob = NULL) Score1 <- sample(1, size=10, replace = T, prob = NULL) Score2 <- sample(seq(0.71,1,length.out = 3),size = 10, replace = T) Round2 <- sample(LETTERS[1:2],size = 10,replace = T) d <- data.frame(Round1,Score1,Round2,Score2) d$Round1 <- as.character(d$Round1) d$Round2 <- as.character(d$Round2) d$A <- ifelse(d$Round1==d$Round2, d$Score2, 0) d$B <- ifelse(d$Round1!=d$Round2, 1-d$Score2, 0) d$Alteration <- ifelse(d$A!=0, d$A-d$Score1, d$B-d$Score1) d

[前六个输出:

>Round1 Score1 Round2 Score2 A B Alteration > A 1.000 B 1.000 0.000 0.000 -1.000 > A 0.855 B 1.000 0.000 0.000 -0.855 > A 1.000 B 0.855 0.000 0.145 -0.855 > A 0.855 B 1.000 0.000 0.000 -0.855 > A 0.710 A 0.855 0.855 0.000 0.145 > A 1.000 A 1.000 1.000 0.000 0.000

© www.soinside.com 2019 - 2024. All rights reserved.