Получить предыдущее слово в модели биграмма

Я пытаюсь реализовать цепочки Маркова и нужно вычислить вероятность предыдущего слова. Я создал фрейм данных и попробовал как мутировать, так и цикл for. В обоих случаях по какой-то причине он всегда возвращает только предыдущее слово 1-го элемента. Используемый фрейм данных

             freq         term
ball costs      1   ball costs
bat bal         1      bat bal
bat ball        1     bat ball
bread eggs      1   bread eggs
buy bread       1    buy bread
costs rupe      1   costs rupe

Я написал функцию, чтобы получить Предыдущий

getPrevious <- function(term)
{
    b <- strsplit(term,split=" ")
    c <- unlist(b)
    c[1]
 }

Я пробовал и мутировать, и цикл. Оба заполняют все строки только предыдущим словом 1-й строки (см. Ниже)

   mutate(bigram, x= getPrevious(term))

и я, кажется, только

      freq         term   prob    x
  1     1   ball costs 0.0625 ball
  2     1      bat bal 0.0625 ball
  3     1     bat ball 0.0625 ball
  4     1   bread eggs 0.0625 ball
  5     1    buy bread 0.0625 ball
  6     1   costs rupe 0.0625 ball

Я не понимаю, почему он не может выбрать предыдущее слово из каждого термина. Я даже попробовал цикл для того же эффекта.

Куда я иду не так?

Спасибо Ганеша

1 ответ

Решение

Попробуйте с функцией:

getPrevious <- function(term)
{
    sapply(strsplit(term,split=" "), head, 1)
}

Что вы сделали, так это то, что вы разбили каждый элемент столбца в списке, сместили его в вектор и взяли первый элемент этого вектора, ball, Принимая во внимание, что вам нужно разделить каждый элемент столбца в списке и взять первое слово каждого элемента этого списка.

Другие вопросы по тегам