如何在日期信息之后计算空格数?

Cur*_*us 13 r

我有非结构化数据,如下所示:

data <- c("24-March-2017      product 1              color 1",
"March-2017-24              product 2                 color 2",
"2017-24-March  product 3              color 3")
Run Code Online (Sandbox Code Playgroud)

我想计算每行的日期和第一个字符(产品列)之间的空格数.如示例数据所示,日期格式可能会有所不同.此信息将用于将数据置于结构化格式.

在R中执行此操作的最佳方法是什么?我相信gsub在这种情况下可以使用,只是不确定如何应用于只计算每行开头的空格数.

sin*_*eso 11

一种方法是使用regexpr它将返回有关给定正则表达式的第一个匹配的信息.在您的情况下,您正在寻找重复空白的第一个实例.因此,以下内容将告诉您(1)在您的字符串中您将找到第一个空格,以及(2)在属性中您有多少个空格:

regexpr("\\s+", data)
# [1] 14 14 14
# attr(,"match.length")
# [1]  6 14  2
# attr(,"useBytes")
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用attr提取match.length属性:

attr(regexpr("\\s+", data), "match.length")
Run Code Online (Sandbox Code Playgroud)

编辑

正如@xehpuk指出的那样,using \\s+将匹配至少一个空格.如果您的日期列包含可能有问题的空格.相反,你需要使用\\s{2,}.


Ric*_*ven 7

您可以将该部分分出,然后取出字符数.

nchar(sub("\\S+(\\s+).*", "\\1", data))
# [1]  6 14  2
Run Code Online (Sandbox Code Playgroud)

或者这个有点好玩:

nchar(data) - nchar(sub("\\s+", "", data))
# [1]  6 14  2
Run Code Online (Sandbox Code Playgroud)