查找字符串中的空格数

gen*_*kii 7 string r

如何根据空间创建不同的列,例如:"我要出去"

ANs 3
Column1 Column2 Column3 Column14 
I          am     going    out
Run Code Online (Sandbox Code Playgroud)

MvG*_*MvG 16

如果您想要实际的列值,如您的示例所示,那么您可以从文本连接中读取表:

> read.table(textConnection("I am going Out"))
  V1 V2    V3  V4
1  I am going Out
Run Code Online (Sandbox Code Playgroud)

要回答问题的标题,即有多少个空格,您可以ncol用来计算上面的列,然后减去一个.但是,如果您对空格数感兴趣,则以下更有效:

length(gregexpr(" ", "I am going Out")[[1]])
Run Code Online (Sandbox Code Playgroud)

这使用正则表达式来搜索空格.

[[1]]取结果列表的第一个元素,它对应于与"我走出去"作为其唯一元素的输入向量的第一个项目.如果你在那里传递了一个不同的向量,你的列表可能有多个元素,或者根本没有一个空向量.

如果没有空格,gregexpr仍将返回一个长度列表1,-1作为匹配的位置,表示没有匹配.这会导致上述代码在这种情况下错误地报告一个结果.一个更精细的解决方案,处理它并接受矢量作为输入,如下:

countSpaces <- function(s) { sapply(gregexpr(" ", s), function(p) { sum(p>=0) } ) }
Run Code Online (Sandbox Code Playgroud)

该函数的工作原理如下:gregexpr将返回结果列表,每个元素对应一个输入向量 元素s.sapply将迭代该列表,并为列表的每个元素计算匹配数.它不是计算length匹配位置的矢量,而是sum仅计算非负值,从而丢弃-1由失败匹配引起的任何值.有一个从隐式转换FALSE/TRUE0/1该款项发生.结果sapply将再次成为一个向量,从而很好地匹配输入向量.

此函数可用于重写数据框,如一条注释中所要求的那样.因此,假设您有一个数据框foo,其中包含列中的字符串,bar并应修改为在新列中包含这些计数baz.你可以这样写

foo <- transform(foo, baz = countSpaces(bar))
Run Code Online (Sandbox Code Playgroud)

  • @mrdwab,请参阅http://meta.stackexchange.com/questions/30020/multiple-spaces-in-code-in-comments-get-merged-into-one.解决方法:使用非中断空间,作为U + 00A0 unicode代码点输入. (2认同)

csg*_*pie 5

另一种方法是使用该strsplit函数:

R> strsplit("I am going Out", " ")[[1]]
[1] "I"     "am"    "going" "Out"  
Run Code Online (Sandbox Code Playgroud)

所以我们将第一个参数 - I am going Out- 通过第二个参数 - 空白空间。然后我们可以使用length

R> length(strsplit("I am going Out", " ")[[1]])
[1] 4
Run Code Online (Sandbox Code Playgroud)


Max*_*cia 5

您也可以使用包装str_count中的stringr产品。这些不太冗长,并且避免正则表达式可能会更快一些。

library(stringr)
text = "I am going Out"
#matches regular expression
str_count(text, ' ')
Run Code Online (Sandbox Code Playgroud)

或者,如果你想要更快的东西

#matches literal text
str_count(text, fixed(' '))
Run Code Online (Sandbox Code Playgroud)