【发布时间】:2018-07-04 01:22:10
【问题描述】:
我想我在理解 R 中的正则表达式时可能会遇到一些问题。
我需要从样本向量中提取电话号码和姓名,并使用 stringr 包功能创建一个数据框,其中包含姓名和号码的对应列。
以下是我的样本向量。
phones <- c("Ann 077-789663", "Johnathan 99656565",
"Maria2 099-65-6569 office")
我想出的提取这些的代码如下
numbers <- str_remove_all(phones, pattern = "[^0-9]")
numbers <- str_remove_all(numbers, pattern = "[a-zA-Z]")
numbers <- trimws(numbers)
names <- str_remove_all(phones, pattern = "[A-Za-z]+", simplify = T)
phones_data <- data.frame("Name" = names, "Phone" = numbers)
它不起作用,因为它需要名称中的数字并与电话号码连接。 (也不是最优代码)
在解释完成此任务的最简单方法时,我将不胜感激。
【问题讨论】:
-
@Onyambu 你能解释一下吗?
-
strcapture("(\\w+)\\s(\\S+)",phones,data.frame(names=character(),phone=character())) -
read.table(text=phones,col.names = c("names","phone","office"),fill=T) -
这个问题是我只需要使用“stringr”包的名称,其中没有数字,数字中没有破折号。无论如何,谢谢。
-
data.frame(names=str_extract(phones,"^\\w+"),phones=str_extract(phones,"\\b\\d[^ ]*"))