У меня есть данные в формате:
structure(list(choice = structure(c(1L, 1L, 2L, 1L), .Label = c("option1",
"option2"), class = "factor"), option1var1 = structure(c(1L,
1L, 1L, 1L), .Label = "A", class = "factor"), option1var2 = structure(c(1L,
1L, 1L, 2L), .Label = c("B", "H"), class = "factor"), option2var1 = structure(c(1L,
1L, 2L, 3L), .Label = c("C", "F", "I"), class = "factor"), option2var2 = structure(1:4, .Label = c("D",
"E", "G", "K"), class = "factor")), .Names = c("choice", "option1var1",
"option1var2", "option2var1", "option2var2"), class = "data.frame", row.names = c(NA,
-4L))
с шестью колоннами. Первый столбец содержит идентификатор респондента, второй столбец содержит данные о выборе, сделанном респондентом (либо option1 или option2), столбцы 3 и 4 содержат атрибуты, связанные с option1, а столбцы 4 и 5 содержат атрибуты, связанные с option2.
Я хочу преобразовать фрейм данных так, чтобы он выглядел следующим образом:
structure(list(respondent = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L),
choice = c(1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L), option = structure(c(1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("option1", "option2"
), class = "factor"), var1 = structure(c(1L, 2L, 1L, 2L,
1L, 3L, 1L, 4L), .Label = c("A", "C", "F", "I"), class = "factor"),
var2 = structure(c(1L, 2L, 1L, 3L, 1L, 4L, 5L, 6L), .Label = c("B",
"D", "E", "G", "H", "K"), class = "factor")), .Names = c("respondent",
"choice", "option", "var1", "var2"), class = "data.frame", row.names = c(NA,
-8L))
Для этого необходимо разделить каждую строку на две, оставить данные опции 1 в одной строке и переместить данные опции 2 в другую строку, а также создать новую числовую переменную с информацией о том, какой выбор (вариант 1 или вариант 2 у каждого респондента).
Кажется, что нет никакой доступной информации об этом типе преобразования - ни здесь, ни в документации R, которую я нашел. Кто-нибудь знает, как это сделать?