我有非结构化数据,如下所示:
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
,只是不确定如何应用于仅计算每行开头的空格数。
答案 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