Я попробовал ответить, вдохновленный предыдущими.
df <- tibble(names= c('perform data cleansing','information categorisation'), stringsAsFactors = FALSE)
words <- strsplit( df$names, " ", fixed = TRUE)
mutate(df, name1=lapply(words, combn, 2, simplify=F)) %>%
unnest(name1, .id='index') %>%
## separate list in double columns
separate(col=name1, into=c('supp0', 'cooc1','cooc2', 'supp1')) %>%
## reorder columns and suppress extra ones
select(index, names, cooc1, cooc2, -supp0, -supp1, -stringsAsFactors)
Где индекс указывает names
'оригинальный индекс.
# A tibble: 4 x 4
index names cooc1 cooc2
<int> <chr> <chr> <chr>
1 1 perform data cleansing perform data
2 1 perform data cleansing perform cleansing
3 1 perform data cleansing data cleansing
4 2 information categorisation information categorisation