我有这个示例 dataframe ,并希望明确区分" |" :
df <- data.frame(x = c("11|", "22|", "|33", "44|"))
df %>% separate(x, c("A", "B"), sep = "|")
以下是不我需要的内容:
# A B
# 1 1
# 2 2
# 3 |
# 4 4
# Warning message:
# Too many values at 4 locations: 1, 2, 3, 4
我期待这个输出:
# A B
# 1 11
# 2 22
# 3 33
# 4 44
答案 0 :(得分:4)
由于|
在正则表达式中的含义为“或”,因此如果您的字面意思是\\
,则需要使用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
进行转义:
sep
正如David指出的那样,它包含在"[^[: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
也会将数字转换为实际数字,因此您可以编写:
{clean:true}
这可能是一种更有用的形式。