Предупреждение: этот вопрос кажется настолько простым, что мне, как новичку, вероятно, не удалось найти правильное решение среди более сложных тем по SO (посмотрел здесь , здесь , здесь и в других местах)
Я хотел бы заполнить столбец в моем фрейме данных на основе другого столбца и использовать в качестве входных данных дополнительные столбцы.Это гораздо яснее с примером:
Version1 Version2 Version3 Version4 Presented_version Color
1 blue red green yellow 1 NA
2 red blue yellow green 4 NA
3 yellow green red blue 3 NA
Я хотел бы заполнить столбец " Цвет " значением либо Version1 / Version2 / Version3 / Version 4. Столбец Presented_version говорит мне, какое из этих четырех значений необходимо.Например, в строке 1 Presented_version равно 1, поэтому требуемое значение находится в «Version1» («синий»).Цвет в строке 1 должен быть синим.
Может ли кто-нибудь показать мне способ сделать это без зацикливания на кадре данных, используя множество операторов "if"?
structure(list(Version1 = structure(1:3, .Label = c("blue", "red",
"yellow"), class = "factor"), Version2 = structure(c(3L, 1L,
2L), .Label = c("blue", "green", "red"), class = "factor"), Version3 = structure(c(1L,
3L, 2L), .Label = c("green", "red", "yellow"), class = "factor"),
Version4 = structure(3:1, .Label = c("blue", "green", "yellow"
), class = "factor"), Presented_version = c(1L, 4L, 3L),
Color = c(NA, NA, NA)), class = "data.frame", row.names = c(NA,
-3L))
======================= РЕДАКТИРОВАНИЕ!
Я упростил пример, чтобы объяснить свой вопрос, но пример выше несколько отличается от моего фактического набора данных, и решенияпоэтому делайте предположения, которые на самом деле не соответствуют моим данным.Вот более точное представление data.frame.В частности, не существует фиксированного соответствия между Presented_version и содержимым столбцов Version1 ... Version 4 (которые отличаются в зависимости от дополнительного столбца, который я сейчас назвал Painter), и Version1-Version4 не обязательно находятся в столбцах 1-4.в моем наборе данных.
FillerColumn Painter Version1 Version2 Version3 Version4 Version_presented Color FillerColumn.1
1 77 A blue red green yellow 1 NA 77
2 77 B red blue yellow green 4 NA 77
3 77 C yellow green red blue 3 NA 77
4 77 D red blue yellow green 1 NA 77
structure(list(FillerColumn = c(77L, 77L, 77L, 77L), Painter = structure(1:4, .Label = c("A",
"B", "C", "D"), class = "factor"), Version1 = structure(c(1L,
2L, 3L, 2L), .Label = c("blue", "red", "yellow"), class = "factor"),
Version2 = structure(c(3L, 1L, 2L, 1L), .Label = c("blue",
"green", "red"), class = "factor"), Version3 = structure(c(1L,
3L, 2L, 3L), .Label = c("green", "red", "yellow"), class = "factor"),
Version4 = structure(c(3L, 2L, 1L, 2L), .Label = c("blue",
"green", "yellow"), class = "factor"), Version_presented = c(1L,
4L, 3L, 1L), Color = c(NA, NA, NA, NA), FillerColumn.1 = c(77L,
77L, 77L, 77L)), class = "data.frame", row.names = c(NA,
-4L))