R 通过一行中的字数对字符串向量进行子集设置
我有一个字符串向量R 通过一行中的字数对字符串向量进行子集设置,r,string,subset,stringr,sapply,R,String,Subset,Stringr,Sapply,我有一个字符串向量 rownames [1] "multifarmacias descuento" "multifarmacias" "multifarmacias" 我的目标是用只包含一个单词的字符串在一行中对行名进行子集-输出将是 [1] "multifarmacias" "multifarmacias" 我尝试了以下操作,但它抛出了一个错误: ro
rownames
[1] "multifarmacias descuento" "multifarmacias" "multifarmacias"
我的目标是用只包含一个单词的字符串在一行中对行名
进行子集-输出将是
[1] "multifarmacias" "multifarmacias"
我尝试了以下操作,但它抛出了一个错误:
rownames[which(sapply(strsplit(rownames, " "),length)) == 1]
Error in which(sapply(strsplit(rownames, " "), length)) :
argument to 'which' is not logical
是否有一种优雅的解决方案可以根据字符串的字长来划分字符串向量?使用
stru count
library(stringr)
rownames[str_count(rownames, "\\w+") == 1]
#[1] "multifarmacias" "multifarmacias"
如果我们使用
strsplit
和length
(从baser
)将更有效
rownames[lengths(strsplit(rownames, "\\s+")) == 1]
#[1] "multifarmacias" "multifarmacias"
OP帖子中的错误基于
)
的错误位置,它应该在==1
之后,因为直接应用于长度向量,即
which(c(2, 1, 1))
错误,其中(c(2,1,1)):“which”的参数不符合逻辑
数据
rownamesAbase R
解决方案是:
#Data
x <- c("multifarmacias descuento", "multifarmacias", "multifarmacias")
#Code
x[which(lapply(strsplit(x,split = ' '),length)==1)]
下面是另一个使用grep的基本R选项
grep("\\s",rownames,invert = TRUE,value = TRUE)
给
> grep("\\s",rownames,invert = TRUE,value = TRUE)
[1] "multifarmacias" "multifarmacias"
grep("\\s",rownames,invert = TRUE,value = TRUE)
> grep("\\s",rownames,invert = TRUE,value = TRUE)
[1] "multifarmacias" "multifarmacias"