首页 > 解决方案 > 在一行中按字数对字符串向量进行子集

问题描述

我有一个字符串向量

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

是否有一个优雅的解决方案可以通过字符串的单词长度对字符串向量进行子集?

标签: rstringsubsetstringrsapply

解决方案


会更容易str_count

library(stringr)
rownames[str_count(rownames, "\\w+") == 1]
#[1] "multifarmacias" "multifarmacias"

如果我们使用strsplitwith 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")

推荐阅读