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

时间:2017-04-03 22:42:28

标签: r

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

data <- c("24-March-2017      product 1              color 1",
"March-2017-24              product 2                 color 2",
"2017-24-March  product 3              color 3")

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

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

4 个答案:

答案 0 :(得分:11)

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

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

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

attr(regexpr("\\s+", data), "match.length")

修改

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

答案 1 :(得分:7)

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

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

或者这个很有趣:

nchar(data) - nchar(sub("\\s+", "", data))
# [1]  6 14  2

答案 2 :(得分:3)

使用<?php echo "<a href='logs.php?clear=true' onclick='return confirm(\"Are you sure:\n To delete this\");'>Clear</a>"; 的相同解决方案如上所述,但在一行中:

gregexpr

我假设日期总是在开始时。

答案 3 :(得分:1)

这是获取输出的public static bool HasProperty(dynamic obj, string name) { try { var value = obj[name]; return true; } catch (KeyNotFoundException) { return false; } } 方法

stringi