У меня есть набор данных, который сопоставляет людей вместе, а затем вычисляет оценку (D1N и D2N) для двух человек на основе абсолютной разницы между оценками двух людей (PS1 и PS2, рассчитанными в SD) и их текущими оценками D (D1 и D2).У меня есть набор данных, настроенный таким образом, что в первый раз, когда человек появляется в матче между людьми (как P1 ИЛИ P2), его D по умолчанию равен 1 (у меня есть переменная времени в наборе данных, чтобы сделать это).Ниже приведен пример меньшего и более простого набора данных, с которым можно поиграться.
dataset <- structure(list(Time = 1:5, P1 = c(1L, 3L, 3L, 2L, 5L), P2 = c(2L,
2L, 5L, 1L, 4L), PS1 = c(1, -0.3, -0.3, 2.5, 0.5), PS2 = c(2.5,
2.5, 0.5, 1, -1), SD = c(1.5, 2.8, 0.8, 1.5, 1.5), D1 = c(1L,
1L, NA, NA, NA), D2 = c(1L, NA, 1L, NA, 1L), D1N = c(1.224744871,
NA, NA, NA, NA), D2N = c(1.224744871, NA, NA, NA, NA)), .Names = c("Time",
"P1", "P2", "PS1", "PS2", "SD", "D1", "D2", "D1N", "D2N"), class = "data.frame", row.names = c(NA,
-5L))
То, что я пытаюсь сделать, это вычислять DN1 и DN2 построчно, так что если D1 и D2 не равны 1, тогда код ищет идентификатор человека (P1 и P2), чтобы получить его предыдущийД оценка.Так, например, во второй строке набора данных я хочу, чтобы D2 был 1,224745, так как это их последняя оценка D.Тогда DN2 для этой строки будет рассчитываться как 2,049, а затем это будет число, помещенное в D1 для времени 4. Точные вычисления здесь не очень важны. Я просто пытаюсь привести более простой пример, поскольку основной вопрос - как получитьчисла для заполнения в последующих строках на основе идентификатора, когда идентификатор находится в двух столбцах.
Я знаю, что есть небольшой построчный код, который будет выглядеть примерно так:
for (row in 1:nrow(dataset)){
#code here that will pull previous D value based on ID across columns if D is not 1
dataset$D1N <- dataset$D1*sqrt(dataset$SD)
dataset$D2N <- dataset$D2*sqrt(dataset$SD)
}
но я не знаю, как получить идентификатор для двух столбцов.
Для ясности P1 и P2 - это всего лишь два столбца, которые соответствуют людям вместе, но идентификаторы в обоих столбцах по-прежнему являются уникальными идентификаторами (если кто-то в столбце P1 равен 5, это тот же человек, что и человек, которому 5 лет).в столбце P2).
Какой способ это сделать?Спасибо за помощь!