在一行中按字数对字符串向量进行子集化
Subsetting string vector by word count in one line
我有一个字符串向量
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
和 lengths
(来自 base R
)会更有效率
rownames[lengths(strsplit(rownames, "\s+")) == 1]
#[1] "multifarmacias" "multifarmacias"
OP post 中的错误是基于 )
的错误放置,它应该在 ==1
之后,因为 which
直接应用于矢量长度即
which(c(2, 1, 1))
Error in which(c(2, 1, 1)) : argument to 'which' is not logical
数据
rownames <- c("multifarmacias descuento", "multifarmacias", "multifarmacias")
一个base R
解决方案是:
#Data
x <- c("multifarmacias descuento", "multifarmacias", "multifarmacias")
#Code
x[which(lapply(strsplit(x,split = ' '),length)==1)]
输出:
[1] "multifarmacias" "multifarmacias"
这是另一个使用 grep
的基本 R 选项
grep("\s",rownames,invert = TRUE,value = TRUE)
这给出了
> grep("\s",rownames,invert = TRUE,value = TRUE)
[1] "multifarmacias" "multifarmacias"
我有一个字符串向量
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
和 lengths
(来自 base R
)会更有效率
rownames[lengths(strsplit(rownames, "\s+")) == 1]
#[1] "multifarmacias" "multifarmacias"
OP post 中的错误是基于 )
的错误放置,它应该在 ==1
之后,因为 which
直接应用于矢量长度即
which(c(2, 1, 1))
Error in which(c(2, 1, 1)) : argument to 'which' is not logical
数据
rownames <- c("multifarmacias descuento", "multifarmacias", "multifarmacias")
一个base R
解决方案是:
#Data
x <- c("multifarmacias descuento", "multifarmacias", "multifarmacias")
#Code
x[which(lapply(strsplit(x,split = ' '),length)==1)]
输出:
[1] "multifarmacias" "multifarmacias"
这是另一个使用 grep
grep("\s",rownames,invert = TRUE,value = TRUE)
这给出了
> grep("\s",rownames,invert = TRUE,value = TRUE)
[1] "multifarmacias" "multifarmacias"