For循环和gsub R
For loop and gsub R
我有一个关于在 R 中的 for 循环中使用 gsub 的问题。
我有一个包含 "sku" 和 "cat" 列的数据框 (catalog),它们是同一产品的 sku ID 和目录 ID不同的来源。
然后我有一个带有 sku 的数据框 (image_data) 和图像描述 (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,我将不胜感激。
如果我单独做,它会起作用。
最好的
您可以使用 qdap::mgsub
执行多个搜索和替换操作:
Multiple Gsub
A wrapper for gsub
that takes a vector of search terms and a vector or single value of replacements.
查看 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
无需加载任何库的解决方案。你需要一个嵌套循环。
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
我有一个关于在 R 中的 for 循环中使用 gsub 的问题。
我有一个包含 "sku" 和 "cat" 列的数据框 (catalog),它们是同一产品的 sku ID 和目录 ID不同的来源。
然后我有一个带有 sku 的数据框 (image_data) 和图像描述 (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,我将不胜感激。
如果我单独做,它会起作用。
最好的
您可以使用 qdap::mgsub
执行多个搜索和替换操作:
Multiple Gsub
A wrapper forgsub
that takes a vector of search terms and a vector or single value of replacements.
查看 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
无需加载任何库的解决方案。你需要一个嵌套循环。
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