【发布时间】:2016-11-05 07:26:54
【问题描述】:
嘿,所以我有一个带有 head() 的小标题,如下所示:
# A tibble: 6 × 1
id.make.model.year
<chr>
1 27550?????AM General?????DJ Po Vehicle 2WD?????1984
2 28426?????AM General?????DJ Po Vehicle 2WD?????1984
3 27549?????AM General?????FJ8c Post Office?????1984
4 28425?????AM General?????FJ8c Post Office?????1984
5 1032?????AM General?????Post Office DJ5 2WD?????1985
6 1033?????AM General?????Post Office DJ8 2WD?????1985
只有一列。我想用这四个列名将它分成四列。我尝试使用separate()
A %>%
separate(id.make.model.year,into=c("id","make"),sep="?????")
和
A %>%
separate(id.make.model.year,into=c("id","make"),sep="\\?????")
但它们都返回以下错误:
stringi::stri_split_regex(value, sep, n_max) 中的错误: 正则表达式模式中的语法错误。 (U_REGEX_RULE_SYNTAX)
再试一次……:
A %>%
separate(id.make.model.year,into=c("id","make"),sep="[?????]")
返回
# A tibble: 33,439 × 2
id make
* <chr> <chr>
1 27550
2 28426
3 27549
4 28425
5 1032
6 1033
7 3347
8 13309
9 13310
10 13311
# ... with 33,429 more rows
Warning message:
Too many values at 33439 locations: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...
我也尝试删除 sep,但所有空格都清楚地算作分隔符。
这样做的正确方法是什么?提前致谢。
【问题讨论】:
-
请在您的问题中添加
dput(head(df))的输出,使其成为reproducible example。无论如何,这对我来说只是一个简单的正则表达式问题。 -
匹配一个问号的正则表达式是
\?,或[?]。但是,如果您有五个,[?????]仍然只有一个匹配该字符的出现,就像[aaaaa]只匹配一个字母a,而不是五个。所以我认为你想要\?{5}或[?]{5}(或\?\?\?\?\?或[?][?][?][?][?])。在您使用dput()发布数据之前,我无法确认。 -
顺便说一句,如果'?????'来自
read.csv()的 Unicode 编码错误或奇怪的分隔符,您可能需要修复它。