我的数据框如下:
User
JohnLenon03041965
RogerFederer12021954
RickLandsman01041975
我正在尝试将输出作为
Name Lastname Birthdate
John Lenon 03041965
Roger Federer 12021954
Rick Landsman 01041975
我尝试了以下代码:
**a = gsub('([[:upper:]])', ' \\1', df$User)
a <- as.data.frame(a)
library(tidyr)
a <-separate(a, a, into = c("Name", "Last"), sep = " (?=[^ ]+$)")**
我得到以下信息:
Name Last
John Lenon03041965
Roger Federer12021954
Rick Landsman01041975
我试图使用像 (?=[0-9]) 这样的单独条件,但得到这样的错误:
c <-separate(c, c, into = c("last", "date"), sep = '(?=[0-9])')
if (!after) c(values, x) else if (after >= lengx) c(x, values) else c(x[1L:after], : 参数长度为零时出错
我们可以sep
通过指定在小写字母和大写字母 ( (?<=[a-z])(?=[A-Z])
)之间拆分或 ( |
) 在小写字母和数字 ( (?<=[a-z])(?=[0-9]+)
)之间拆分来使用正则表达式环视
df1 %>%
separate(User, into = c("Name", "LastName", "Birthdate"),
sep = "(?<=[a-z])(?=[A-Z])|(?<=[a-z])(?=[0-9]+)")
# Name LastName Birthdate
#1 John Lenon 03041965
#2 Roger Federer 12021954
#3 Rick Landsman 01041975
或者另一种选择是extract
通过将字符放在方括号 ( (...)
)内来将字符作为一个组捕获。这里,第一个捕获组匹配一个大写字母后跟一个或多个小写字母 ( ([A-Z][a-z])
) 从^
字符串的开头 ( ),第二个捕获一个或多个不是数字 ( ([^0-9]+)
) 的字符,并且在第 3 个字符中,它是其余字符 ( (.*)
)
df1 %>%
extract(User, into = c("Name", "LastName", "Birthdate"),
"^([A-Z][a-z]+)([^0-9]+)(.*)")
# Name LastName Birthdate
#1 John Lenon 03041965
#2 Roger Federer 12021954
#3 Rick Landsman 01041975
df1 <- structure(list(User = c("JohnLenon03041965", "RogerFederer12021954",
"RickLandsman01041975")), .Names = "User", class = "data.frame", row.names = c(NA,
-3L))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句