清理字符向量和strsplit到数据帧

时间:2016-01-08 20:00:53

标签: regex r

我想要转换成数据框的字符检查器。 它大部分都很干净,但我无法弄清楚如何完成清洁工作。请注意,实际数据为Date列为yyyy-mm-ddVariable列为数字(在本例中为四位但不总是以逗号分隔)。

class(myvec)
[1] "character"
myvec
[1] " \"2016-01-01,8631n\" " " \"2016-01-02,8577n\" "
[3] " \"2016-01-03,8476n\" " " \"2016-01-04,8365n\" "
[5] " \"2016-01-05,8331n\" " " \"2016-01-06,8801n\" "
[7] " \"2016-01-07,5020n\"" 

空格和反斜杠" (' \"')应该删除。与n \"相同 预期的输出应该是这样的数据框

    Date         Variable  
[1,] "2016-01-01" "8631"
[2,] "2016-01-02" "8577"
[3,] "2016-01-03" "8476"
[4,] "2016-01-04" "8365"
[5,] "2016-01-05" "8331"
[6,] "2016-01-06" "8801"
[7,] "2016-01-07" "5020"

一旦矢量是战队,我认为这可以胜任

do.call(rbind,strsplit(clean_vector,","))

我想我可以将lubridatevar转换为与我自己的as.numeric数字相关的数字,问题是如何使字符向量清晰且格式正确。

1 个答案:

答案 0 :(得分:3)

您可以通过枚举它们来删除有问题的字符:

# example
x = " \"2016-01-01,8631n\" "

gsub("[n \"]","",x)
# "2016-01-01,8631"

这是有效的,因为[xyz]标识列表xyz中的任何单个字符。

或者您可以使用子字符串,因为格式是固定宽度的,在开头和结尾有不好的字符:

substr(x,3,17)
# "2016-01-01,8631"

如果字符串的var部分的长度不同,nchar(x)-3应该代替17