У меня есть набор данных, состоящий из предложений с последовательными повторениями слов :
ДАННЫЕ :
df <- data.frame(
Turn = c("oh is that that steak i got the other night", # that that
"no no no i 'm dave and you 're alan", # no no no
"yeah i mean the the film was quite long though", # the the
"it had steve martin in it it 's a comedy")) # it it
ЦЕЛЬ :
Я хотел бы получить еще три столбца, добавленных к этому фрейму данных:
df$rep_Word
: столбец, определяющий повторяющееся слово df$rep_Pos
: столбец, определяющий первую позицию в предложении, в котором повторяется слово df$rep_Numb
: столбец, определяющий количество повторений слова
Таким образом, ожидаемый фрейм данных выглядит следующим образом:
ОЖИДАЕМЫЙ РЕЗУЛЬТАТ :
df
Turn rep_Word rep_Pos rep_Numb
1 oh is that that steak i got the other night that 4 1
2 no no no i 'm dave and you 're alan no 2 2
3 yeah i mean the the film was quite long though the 5 1
4 it had steve martin in it it 's a comedy it 7 1
ИСПЫТАННОЕ РЕШЕНИЕ ТАК ДАЛЕКО :
My есть предположение, что к искомой информации о повторном слове, а также о позиции и количестве повторений можно приблизиться с помощью strsplit
и функции duplicated
, например, таким образом:
df_split <- apply(df, 2, function(x) strsplit(x, "\\s"))
df_split
$Turn
$Turn[[1]]
[1] "oh" "is" "that" "that" "steak" "i" "got" "the" "other" "night"
$Turn[[2]]
[1] "no" "no" "no" "i" "'m" "dave" "and" "you" "'re" "alan"
$Turn[[3]]
[1] "yeah" "i" "mean" "the" "the" "film" "was" "quite" "long" "though"
$Turn[[4]]
[1] "it" "had" "steve" "martin" "in" "it" "it" "'s" "a" "comedy"
Например, для первого предложения в df
, duplicated
показывает, какое слово повторяется (а именно то, для которого duplicated
оценивается как TRUE
) и и номер, и положение повтора также могут быть считаны с этой информации:
duplicated(df_split$Turn[[1]])
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Проблема в том, что я не знаю, как задействовать duplicated
таким образом, чтобы получить желаемое добавленное столбцы в df
. Помощь в этом деле очень ценится.