Как преобразовать разделенные запятыми множественные ответы в фиктивные столбцы в R - PullRequest
0 голосов
/ 22 мая 2019

В ходе опроса был задан вопрос, который спросил: «Какой аспект курса помог вам выучить концепции больше всего? Выберите все подходящие варианты»

Вот как выглядел список ответов:

Student_ID = c(1,2,3)
Responses = c("lectures,tutorials","tutorials,assignments,lectures", "assignments,presentations,tutorials")
Grades = c(1.1,1.2,1.3)
Data = data.frame(Student_ID,Responses,Grades);Data

Student_ID | Responses                           | Grades
1          | lectures,tutorials                  | 1.1
2          | tutorials,assignments,lectures      | 1.2
3          | assignments,presentations,tutorials | 1.3

Теперь я хочу создать фрейм данных, который будет выглядеть примерно так

Student_ID | Lectures | Tutorials | Assignments | Presentation | Grades
1          |     1    |     1     |      0      |       0      |  1.3
2          |     1    |     1     |      1      |       0      |  1.4
3          |     0    |     1     |      1      |       1      |  1.3

Мне удалось разделить запятые ответы на столбцы, используя пакет splitstackshape. В настоящее время мои данные выглядят так:

Student ID | Response 1 | Response 2  | Response 3 | Response 4 | Grades
1          | lectures   | tutorials   |    NA      |     NA     |   1.1
2          | tutorials  | assignments | lectures   |     NA     |   1.2
3          | assignments| presentation| tutorials  |     NA     |   1.3

Но, как я уже говорил ранее, я бы хотел, чтобы моя таблица выглядела так, как я представил выше, в фиктивных кодах. Я застрял на том, как поступить. Возможно, идея состоит в том, чтобы просмотреть каждое наблюдение в столбцах и добавить 1 или 0 к новому фрейму данных с лекциями, учебными пособиями, заданиями, представлением в качестве заголовков?

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Я нашел ответ на свой вопрос. Я изначально сделал

library(splitstackshape)
Responses = cSplit(Data, "Responses",",")

Затем я добавил следующую строку:

library(qdapTools)
TA <- mtabulate(as.data.frame(t(TA)))

Это сработало для меня.

0 голосов
/ 23 мая 2019

Сначала столбец Response преобразуется из фактора в класс символов.Каждый элемент этого столбца затем разделяется запятой.Я не знаю, каковы все возможные ответы, поэтому я использовал все, что присутствует.Далее в столбце разбивается Response с указанием возможных уровней.Результирующий список преобразуется в матрицу перед смешиванием со старым data.frame.

Data$Responses <- as.character(Data$Responses)
resp.split <- strsplit(Data$Responses, ",")

lev <- unique(unlist(resp.split))

resp.dummy <- lapply(resp.split, function(x) table(factor(x, levels=lev)))

Data2 <- with(Data, data.frame(Student_ID, do.call(rbind, resp.fac), Grades))
Data2
#   Student_ID lectures tutorials assignments presentations Grades
# 1          1        1         1           0             0    1.1
# 2          2        1         1           1             0    1.2
# 3          3        0         1           1             1    1.3
...