r - 如何获取 r 数据框中描述中单词的超链接?
问题描述
我有一个带有文字和描述的数据框。要求是检查描述中是否存在单词列中的任何单词。基本上,我们必须针对所有描述运行所有单词,如果这些单词存在,我们必须在描述中超链接这些单词。
我已经尝试过 gsub,如代码所示。这是一个例子。实际数据约为 30k 行。
data = data.frame("word"=c('python py', 'java'),
"description"=c('Java is a statically typed and Python py is a dynamically typed', 'java is a programming language'))
ll <- as.list(data$word)
for (i in 1:nrow(data)){
for (j in ll){
url <- paste0("http://www.google.com/ ",j)
data$new[i] <- gsub(j,url,data$description[i])
}
}
它只更新最后一行,我不确定如何使其成为链接。
预期的结果是使描述中的 python 和 java 成为可点击链接。在后台它必须重定向到一个 url(例如:www.google.com/python py(对于 python py)/www.google.com/java(对于 java))
解决方案
一个选项是str_replace
from stringr
,它可以通过在替换中传递值向量来替换相应的元素。
library(stringr)
data = data.frame("word"=c('python py', 'java'),
"description"=c('Java is a statically typed and Python py is a dynamically typed',
'java is a programming language'), stringsAsFactors = FALSE)
如果打算在“描述”中插入链接
pat <- str_c("\\b(?i)(", data$word, ")\\b")
str_replace(data$description, pat, "http://www.google.com/\\1")
#[1] "Java is a statically typed and http://www.google.com/Python py is a dynamically typed"
#[2] "http://www.google.com/java is a programming language"
更新
用于替换所有出现的单词
data$new <- data$description
for(i in seq_len(nrow(data))) for(j in seq_along(ll)) {
url <- paste0("http://www.google.com/",ll[[j]])
data$new[i] <- sub(ll[[j]], url, data$new[i], ignore.case = TRUE)
}
data$new
#[1] "http://www.google.com/java is a statically typed and http://www.google.com/python py is a dynamically typed"
#[2] "http://www.google.com/java is a programming language"
推荐阅读
- java - javax.jmdns lib 没有被导入。如何清除错误?
- c# - 在 RabbitMQ 中创建一个新的 IModel 实例的成本是多少
- angular - 环境变量的 angular2 元数据
- php - 如何在不知道表的主键和外键的情况下加入多个 mysql 表
- node.js - 文件未显示 express js
- android - 适用于 Android 的 Base64 检查器
- docker - 无法在容器中运行 helm 命令
- python-3.x - 尝试解密消息但出现TypeError:无法将字节连接到str
- javascript - 在 Java 中作为环境变量列出
- console - 控制台 Javascript 标记