我试图将"new_sp_m014"分成四列(new,var,sex,age).我使用了以下块:
task2 %>% separate(code, into = c("new","var","sex","age"), sep = "_")
Run Code Online (Sandbox Code Playgroud)
并且结果适用于new ="new",var ="sp",但是sex ="m014",年龄是NA.
那我怎么能把"m014"分为sex ="m"和age ="014"呢?
这有两种方法:
1)展开正则表达式假设age始终是最后3个字符,请使用下面显示的正则表达式.它匹配| 或者最后三个字符,但不消耗它们.有关零宽度正向先行断言的?regex信息,请参阅参考资料.该参数是可选的,但如果使用的话将年龄转换为数值.convert=TRUE
library(tidyr)
task2 %>%
separate(code, into = c("new", "var", "sex", "age"), sep = "_|(?=...$)",
convert = TRUE)
Run Code Online (Sandbox Code Playgroud)
赠送:
new var sex age
1 new sp m 14
Run Code Online (Sandbox Code Playgroud)
2)insert _ 我们可以在年龄之前插入一个_然后用问题中的代码处理它(除了我们已经添加了convert=TRUE如上所述的可选项),给出相同的结果.sep在这种情况下我们可以使用默认值或使用sep = "_".
library(dplyr)
library(tidyr)
task2 %>%
mutate(code = sub("(...)$", "_\\1", code)) %>%
separate(code, into = c("new", "var", "sex", "age"), convert = TRUE)
Run Code Online (Sandbox Code Playgroud)
使用的输入,可重复的形式是:
task2 <- data.frame(code = "new_sp_m014")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |