我有此示例数据框,并希望在“ |”上分开 明确地:
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)
由于|在正则表达式中表示“或”,因此\\如果您按字面意思表示它,则需要将其转义:
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)
这可能是更有用的形式。