r - 如何将字符向量转换为变量名和str_count?
问题描述
我正在尝试通过针对文本数据帧执行 str_count 的函数将术语的字符向量转换为变量,但我不确定如何执行此操作。
给定一个向量,如:
variablenames <- c("strong","weak","happy","sad")
和文本数据框,例如:
library(tidyverse)
textdf <- as.data.frame("Happy was a dwarf who was perpetually sad.") %>% rename(text = 1)
我想我想要这样的东西:
countstring_fn <- function(variablenames,textdf){
for(term in variablenames){
paste0(term,"count") <- str_count(term,textdf)
}
}
但我很确定这是行不通的。预期的输出是:
text,strongcount,weakcount,happycount,sadcount
"Happy was a dwarf who was perpetually sad.",0,0,1,1
有没有人做过这样的事情并让它发挥作用?
解决方案
这是另一种方式。
library(tidyverse)
variablenames <- c("strong", "weak", "happy", "sad")
textdf <- tibble(
text = c(
'"Happy was a dwarf who was perpetually sad."',
'"If you\'re strong, you\'re not weak."'
)
)
textdf[, str_c(variablenames, 'count')] <- do.call(
rbind,
lapply(
textdf$text,
function(df) {
str_count(toupper(df), toupper(variablenames))
}
)
)
invisible(
apply(
textdf,
1,
function(vec) {
cat(str_c(str_c(vec, collapse = ','), '\n'))
}
)
)
这里的主要区别是数据框中的字符串textdf
用双引号括起来(如果您从 .csv 导入数据,则可以调用str_c('"', textdf$text, '"')
相同的效果)。然后,我们将所有文本和模式转换为大写,以确保找到所有匹配项。最后,我们可以调用str_count()
以获取计数的整数向量,我们可以通过定义所需的列名将其单独分配给特定列。
然后该prntFunc
函数将数据框中的每一行打印到控制台使用apply()
(矢量化比使用 for 循环更快):
"Happy was a dwarf who was perpetually sad.",0,0,1,1
"If you're strong, you're not weak.",1,1,0,0
我们首先使用str_c()
它的折叠能力。换句话说,我们可以将一行中所有五列中的字符串连接成一个字符串,
作为分隔符。然后,对于,我们需要再次使用在每个“行字符串”的末尾cat()
附加一个换行符( ) 。最后,我们可以调用以在控制台中显示带有特殊字符的字符串,例如不带有转义字符 ( ) 的字符串。调用被包装以抑制在交互调用时附加到末尾的 。\n
str_c()
cat()
"
\
cat()
invisible()
NULL
cat()
推荐阅读
- css - 网站部分的滚动动画。
- java - Selenium 项目将无法连接到 Firefox
- ios - Swift:单击推送通知操作按钮时在文本字段中写入并处理它
- angular - 将 takeUntil() 与 Observable 一起使用
? - javascript - FabricJS画布drawImage不显示图像
- php - 如何将我的 php 页面连接到远程 mongodb 服务器?
- php - 如何在php中使用curl,发布json数据和下载文件流
- doctrine - 添加基于条件的选择到学说查询构建器
- r - geom_density y 轴高于 1
- angular - 内部服务器错误。尝试使用角度和猫鼬从 mlab 中的数组中删除一个元素