sep =“ |”的单独函数 不起作用

Yog*_*nde 1 r tidyr

我有此示例数据框,并希望在“ |”上分开 明确地:

df <- data.frame(x = c("11|", "22|", "|33", "44|")) 

df %>% separate(x, c("A", "B"), sep = "|")
Run Code Online (Sandbox Code Playgroud)

下面给出的不是我需要的:

#   A B
# 1   1
# 2   2
# 3   |
# 4   4
# Warning message:
#   Too many values at 4 locations: 1, 2, 3, 4 
Run Code Online (Sandbox Code Playgroud)

我期望这个输出:

#    A  B
# 1 11   
# 2 22   
# 3    33
# 4 44   
Run Code Online (Sandbox Code Playgroud)

ali*_*ire 5

由于|在正则表达式中表示“或”,因此\\如果您按字面意思表示它,则需要将其转义:

library(tidyr)

df <- data.frame(x = c("11|", "22|", "|33", "44|")) 

df %>% separate(x, c("A", "B"), sep = "\\|")
#>    A  B
#> 1 11   
#> 2 22   
#> 3    33
#> 4 44
Run Code Online (Sandbox Code Playgroud)

但是,正如David指出的那样,该属性包含在的默认值中sep,该默认值"[^[:alnum:]]+"使用任何非字母数字字符作为分隔符,因此省略该参数即可完成您想要的操作。添加convert = TRUE将数字转化为实际的数字,以及,所以你可以写:

df %>% separate(x, c("A", "B"), convert = TRUE)
#>    A  B
#> 1 11 NA
#> 2 22 NA
#> 3 NA 33
#> 4 44 NA
Run Code Online (Sandbox Code Playgroud)

这可能是更有用的形式。