Мне удалось решить эту проблему, как показано ниже:
Шаг 1: В качестве первого шага я объединил столбцы:
df$all = paste(df$Task_Alpha,
df$Task_Beta,
df$Task_Charlie,
df$Task_Delta,
sep="-")
userID Score Task_Alpha Task_Beta Task_Charlie Task_Delta all
3108 -8.00 Easy Easy Easy Easy Easy-Easy-Easy-Easy
3207 3.00 Hard Easy Match Match Hard-Easy-Match-Match
3350 5.78 Hard Easy Hard Hard Hard-Easy-Hard-Hard
3961 10.00 Easy Easy Hard Hard Easy-Easy-Hard-Hard
Шаг 2: В качестве второго шага (чтобы иметь более обобщенное решение), я попробовал подход, основанный на n-gram
. Где я пытаюсь разбить строки на любой размер n-gram
Я хочу
library(tidytext)
library(dplyr)
df = as_tibble(df)
df_test = df %>%
unnest_tokens(bigram, all, token = "ngrams", n = 2)
Это дает мне вывод:
userID Score Task_*A* Task_*B* Task_*C* Task_*D* all bigram
3108 -8.00 Easy Easy Easy Easy Easy-Easy-Easy-Easy easy easy
3108 -8.00 Easy Easy Easy Easy Easy-Easy-Easy-Easy easy easy
3108 -8.00 Easy Easy Easy Easy Easy-Easy-Easy-Easy easy easy
3207 3.00 Hard Easy Match Match Hard-Easy-Match-Match hard easy
3207 3.00 Hard Easy Match Match Hard-Easy-Match-Match easy match
3207 3.00 Hard Easy Match Match Hard-Easy-Match-Match match match
3350 5.78 Hard Easy Hard Hard Hard-Easy-Hard-Hard hard easy
3350 5.78 Hard Easy Hard Hard Hard-Easy-Hard-Hard easy hard
3350 5.78 Hard Easy Hard Hard Hard-Easy-Hard-Hard hard hard
3961 10.00 Easy Easy Hard Hard Easy-Easy-Hard-Hard easy easy
3961 10.00 Easy Easy Hard Hard Easy-Easy-Hard-Hard easy hard
3961 10.00 Easy Easy Hard Hard Easy-Easy-Hard-Hard hard hard
Шаг 3: Это решениеотвечает моим требованиям, даже когда я хочу увеличить размер грамма. Например, для 3-gram
я могу просто добиться этого следующим образом:
df = as_tibble(df)
df_test = df %>%
unnest_tokens(trigram, all, token = "ngrams", n = 3)
, что даст:
userID Score Task_*A* Task_*B* Task_*C* Task_*D* all trigram
3108 -8.00 Easy Easy Easy Easy Easy-Easy-Easy-Easy easy easy easy
3108 -8.00 Easy Easy Easy Easy Easy-Easy-Easy-Easy easy easy easy
3207 3.00 Hard Easy Match Match Hard-Easy-Match-Match hard easy match
3207 3.00 Hard Easy Match Match Hard-Easy-Match-Match easy match match
3350 5.78 Hard Easy Hard Hard Hard-Easy-Hard-Hard hard easy hard
3350 5.78 Hard Easy Hard Hard Hard-Easy-Hard-Hard easy hard hard
3961 10.00 Easy Easy Hard Hard Easy-Easy-Hard-Hard easy easy hard
3961 10.00 Easy Easy Hard Hard Easy-Easy-Hard-Hard easy hard hard