Изменение двух значений в R Dataframe - PullRequest
0 голосов
/ 06 апреля 2020

Первоначально у меня есть первые четыре столбца. В 1-м раунде и 2-м раунде есть два игрока A и B. Максимальное количество очков за каждый раунд составляет 1.

В пятой колонке (которую я хочу получить) я бы хотел узнать, сколько изменений ( изменение счета) игрока А во втором раунде по сравнению с первоначальным счетом1.

Так, что в 3-м ряду для раунда 2 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))

1 Ответ

0 голосов
/ 07 апреля 2020

Чтобы получить изменение от Score1, я просто делаю два столбца-посредника, используя функцию ifelse. col A предназначен для Score2, если round1 и round2 имеют одинаковое значение. col B текущая оценка A в раунде 2, если раунде 1 и раунде 2 имеют разные значения. Затем вычисление изменения 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
...