Для петли и gsub R - PullRequest
       10

Для петли и gsub R

0 голосов
/ 12 октября 2018

У меня есть вопрос о наличии gsub в цикле for в R.

У меня есть фрейм данных ( catalog ) со столбцами "sku" и "cat", ониИдентификатор sku и идентификатор каталога для одного и того же продукта из разных источников.

Затем у меня есть фрейм данных ( image_data ) с sku и описаниями изображений (image_data).

Я хочу создать новый столбец ( new_image_description ), в котором все экземпляры sku заменены соответствующим каталожным номером (см. Ниже) из столбца image_des .

Нотолько заменяет одни, а другие нет.ниже приведены некоторые фиктивные данные.

    catalog <- data.frame(sku = c('AX1', "BX2", "CX2", "DXX"), 
    cat = c("AL1", "AL2", "AL3", "AL4"))


    image_data <- data.frame(sku = c("CX2", "AX1", "BX2"), 
image_des = c("CX2 is a good product", "AX1 is not bad",  "BX2 is great as well as DXX"))

    image_data$new_image_description <- NA

    for (i in 1:nrow(catalog)) {

      image_data$new_image_description <-  gsub(as.character(catalog$sku[i]), as.character(catalog$cat[i]), image_data$image_des)

    }

Буду признателен за любой вклад, который может объяснить, почему он не заменяет sku.

Если я делаю это по отдельности, это работает.

Лучше всего

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Решение без загрузки каких-либо библиотек.Вам нужен вложенный цикл.

  sku                   image_des                     new_des
1 CX2       CX2 is a good product       AL3 is a good product
2 AX1              AX1 is not bad              AL1 is not bad
3 BX2 BX2 is great as well as DXX AL2 is great as well as AL4

Код

for (i in 1:nrow(image_data)) {
    for (j in 1:nrow(catalog)) {
        image_data$new_des[i] <-  gsub(catalog$sku[j],
                                       catalog$cat[j],
                                       image_data$new_des[i])
    }
}

Данные

image_data <- data.frame(sku = c("CX2", "AX1", "BX2"),
                         image_des = c("CX2 is a good product",
                                       "AX1 is not bad", 
                                       "BX2 is great as well as DXX"),
                         stringsAsFactors = FALSE)
image_data$new_des <- image_data$image_des
0 голосов
/ 12 октября 2018

Вы можете использовать qdap::mgsub для выполнения нескольких операций поиска и замены:

Несколько Gsub Оболочка для gsub, которая принимает вектор поисковых терминов и вектор или одно значение замен.

См. Демонстрационную версию R:

> library(qdap)
> image_data$new_image_description <- mgsub(as.character(catalog$sku), as.character(catalog$cat), image_data$image_des)
> image_data
  sku                   image_des       new_image_description
1 CX2       CX2 is a good product       AL3 is a good product
2 AX1              AX1 is not bad              AL1 is not bad
3 BX2 BX2 is great as well as DXX AL2 is great as well as AL4
...