Запуск файла данных
data_start <- data.frame(marker = c("yes","yes","no","yes","no"),
id_out = c(5,3,1,1,7),
id_new = c(6,8,9,4,2))
> data_start
marker id_out id_new
1 yes 5 6
2 yes 3 8
3 no 1 9
4 yes 1 4
5 no 7 2
Добавьте три заголовка столбца с пустыми столбцами ниже. Прикрепите начальные значения var1:var3
.
data_start[,c("var1", "var2", "var3")] <- NA
vars <- c(5,3,1)
data_start[1, 4:6] <- vars
> data_start
marker id_out id_new var1 var2 var3
1 yes 5 6 5 3 1
2 yes 3 8 NA NA NA
3 no 1 9 NA NA NA
4 yes 1 4 NA NA NA
5 no 7 2 NA NA NA
Я хотел бы обновить столбцы var1:var3
, применив функцию к каждой строке, где IF marker
= yes
AND id_out
соответствует ЛЮБОЙ из var1:var3
, замените любой из var1:var3
на id_new
. Я нашел это решение, но работает для одной строки кода и по-прежнему требует обновления каждой новой var1:var3
части строки.
data_start[1, 4:6][data_start[1, 4:6] == data_start[1,"id_out"]] <- data_start[1,"id_new"]
Каждая строка также зависит от использования значений из указанной строки, прежде чем снова применить эту функцию.
Окончательный результат будет выглядеть так, когда строки остаются неизменными, когда маркер = no
и каждая строка впоследствии обновляется.
> data_final
marker id_out id_new var1 var2 var3
1 yes 5 6 6 3 1
2 yes 3 8 6 8 1
3 no 1 9 6 8 1
4 yes 1 4 6 8 4
5 no 7 2 6 8 4