вставьте запятые в текстовую строку после определенных слов в г - PullRequest
0 голосов
/ 07 января 2019

вот пример данных:

example_sentences <- data.frame(doc_id = c(1,2,3),
                                sentence_id = c(1,2,3),
                                sentence = c("problem not fixed","i like your service and would tell others","peope are nice however the product is rubbish"))
matching_df <- data.frame(x = c("not","and","however"))

Создано в 2019-01-07 пакетом представ. (v0.2.1)

Я хочу добавить / вставить запятую перед определенным word в строке символов. например, если моя строка:

problem not fixed.

Я хочу преобразовать это в

problem, not fixed.

Другой matching_df содержит слова для сопоставления (это Coordinate conjunctions), поэтому, если x найден в matching_df, вставьте comma + space перед detected word.

Я посмотрел на stringr пакет, но не уверен, как этого добиться.

Best

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Функция gsubfn в пакете gsubfn принимает регулярное выражение в качестве первого аргумента и список (или некоторые другие объекты) в качестве второго аргумента, где имена списка представляют собой строки для сопоставления и значения в списке заменяющие строки.

library(gsubfn)

gsubfn("\\w+", as.list(setNames(paste0(matching_df$x, ","), matching_df$x)), 
  format(example_sentences$sentence))

дает:

[1] "problem not, fixed                            "
[2] "i like your service and, would tell others    "
[3] "peope are nice however, the product is rubbish"
0 голосов
/ 07 января 2019

Я понятия не имею, как выглядит фрейм данных, о котором вы говорите, но я сделал простой фрейм данных, содержащий здесь несколько фраз:

df <- data.frame(strings = c("problems not fixed.","Help how are you"),stringsAsFactors = FALSE)

Затем я сделал вектор слов, чтобы поставить запятую после:

words <- c("problems","no","whereas","however","but")

Затем я помещаю фрейм данных фраз в простой цикл for, используя gsub , чтобы заменить слово словом + запятая:

for (i in 1:length(df$strings)) {
    string <- df$strings[i]
    findWords <- intersect(unlist(strsplit(string," ")),words)
    if (!is.null(findWords)) {
        for (j in findWords) {
            df$strings[i] <- gsub(j,paste0(j,","),string)
        }
    }
}

Выход:

 df
               strings
1 problems, not fixed.
2     Help how are you
...