如何使用 separate() 用 5 个问号分隔符分隔数据?
How to separate data with 5 question marks separator using separate()?
嘿,所以我有一个像这样打印 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="\?????")
但他们都return出现以下错误:
Error in stringi::stri_split_regex(value, sep, n_max) :
Syntax error in regexp pattern. (U_REGEX_RULE_SYNTAX)
再试一次...:[=17=]
A %>%
separate(id.make.model.year,into=c("id","make"),sep="[?????]")
哪个return
# 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,但所有的空格都清楚地算作分隔符。
正确的做法是什么?提前致谢。
这是一个使用 splitstackshape
和 data.table
软件包的解决方案。您用 cSplit()
拆分了该列。由于您需要四列,因此需要在函数中指定 direction = "wide"
。创建四列后,您想要更改列名。我使用 strsplit()
拆分了原始列名称并创建了四个您想要的名称。
library(splitstackshape)
library(data.table)
mydf <- data.frame(id.make.model.year = c("27550?????AM General?????DJ Po Vehicle 2WD?????1984",
"28426?????AM General?????DJ Po Vehicle 2WD?????1984"),
stringsAsFactors = F)
temp <- cSplit(mydf, splitCols = "id.make.model.year", sep = "?????", direction = "wide")
setnames(temp, unlist(strsplit(names(mydf), "[.]")))
# id make model year
#1: 27550 AM General DJ Po Vehicle 2WD 1984
#2: 28426 AM General DJ Po Vehicle 2WD 1984
匹配一个问号的正则表达式是\?
,或[?]
。但是,如果您有五个,[?????]
仍然只有一个匹配该字符的一次出现,因为 [...]
定义了一个字符 class。就像 [aaaaa]
只会匹配一个字母 a
,而不是五个。
因此,为了捕获五次重复,我认为您需要 \?{5}
或 [?]{5}
(或 \?\?\?\?\?
或 [?][?][?][?][?]
)。
直到你 post 数据与 dput()
我无法确认。
嘿,所以我有一个像这样打印 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="\?????")
但他们都return出现以下错误:
Error in stringi::stri_split_regex(value, sep, n_max) : Syntax error in regexp pattern. (U_REGEX_RULE_SYNTAX)
再试一次...:[=17=]
A %>%
separate(id.make.model.year,into=c("id","make"),sep="[?????]")
哪个return
# 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,但所有的空格都清楚地算作分隔符。
正确的做法是什么?提前致谢。
这是一个使用 splitstackshape
和 data.table
软件包的解决方案。您用 cSplit()
拆分了该列。由于您需要四列,因此需要在函数中指定 direction = "wide"
。创建四列后,您想要更改列名。我使用 strsplit()
拆分了原始列名称并创建了四个您想要的名称。
library(splitstackshape)
library(data.table)
mydf <- data.frame(id.make.model.year = c("27550?????AM General?????DJ Po Vehicle 2WD?????1984",
"28426?????AM General?????DJ Po Vehicle 2WD?????1984"),
stringsAsFactors = F)
temp <- cSplit(mydf, splitCols = "id.make.model.year", sep = "?????", direction = "wide")
setnames(temp, unlist(strsplit(names(mydf), "[.]")))
# id make model year
#1: 27550 AM General DJ Po Vehicle 2WD 1984
#2: 28426 AM General DJ Po Vehicle 2WD 1984
匹配一个问号的正则表达式是\?
,或[?]
。但是,如果您有五个,[?????]
仍然只有一个匹配该字符的一次出现,因为 [...]
定义了一个字符 class。就像 [aaaaa]
只会匹配一个字母 a
,而不是五个。
因此,为了捕获五次重复,我认为您需要 \?{5}
或 [?]{5}
(或 \?\?\?\?\?
或 [?][?][?][?][?]
)。
直到你 post 数据与 dput()
我无法确认。