r - 在一行中按字数对字符串向量进行子集
问题描述
我有一个字符串向量
rownames
[1] "multifarmacias descuento" "multifarmacias" "multifarmacias"
我的目标是rownames
通过仅包含一个单词的字符串在一行中进行子集化 - 输出将是
[1] "multifarmacias" "multifarmacias"
我尝试了以下方法,但它会引发错误:
rownames[which(sapply(strsplit(rownames, " "),length)) == 1]
Error in which(sapply(strsplit(rownames, " "), length)) :
argument to 'which' is not logical
是否有一个优雅的解决方案可以通过字符串的单词长度对字符串向量进行子集?
解决方案
会更容易str_count
library(stringr)
rownames[str_count(rownames, "\\w+") == 1]
#[1] "multifarmacias" "multifarmacias"
如果我们使用strsplit
with lengths
(from base R
) 会更有效
rownames[lengths(strsplit(rownames, "\\s+")) == 1]
#[1] "multifarmacias" "multifarmacias"
OP帖子中的错误是基于 的错误放置)
,它应该在==1
因为which
直接应用于长度向量之后,即
which(c(2, 1, 1))
错误 where(c(2, 1, 1)) : 'which' 的参数不合逻辑
数据
rownames <- c("multifarmacias descuento", "multifarmacias", "multifarmacias")
推荐阅读
- elasticsearch - ElasticSearch 中的多键聚合
- r - 如何找到data.frame的每个变量的分位数
- elixir - 在 Phoenix Router 中使用不带 :id 的资源宏
- java - 取消 SwingWorker
- c# - 在硒中选择的jquery中查找项目
- python - 他/她在 django 中注册时如何获取用户名?
- javascript - 状态已更新但无法在 React todo 应用程序中显示该项目
- sql - 如何检查二进制类型的表列是否有值?
- javascript - 遍历映射以呈现组件键的对象数组未在道具中更新
- android - Cordova - WebGL 在手机上运行良好,但在模拟器上运行良好 [没有 CrossWalk]