【发布时间】:2016-09-02 14:37:19
【问题描述】:
dplyr 中的管道很酷,有时我想通过对其应用多个命令来清理一列。有没有办法在mutate() 命令中使用管道?我在使用正则表达式时最注意到这一点,并且在其他情况下也会出现。在下面的示例中,我可以清楚地看到我对“清洁”列应用的不同操作,我很好奇是否有一种方法可以在 mutate() 中模仿 %>%。
library(dplyr)
phone <- data.frame(Numbers = c("1234567890", "555-3456789", "222-222-2222",
"5131831249", "123.321.1234","(333)444-5555",
"+1 123-223-3234", "555-666-7777 x100"),
stringsAsFactors = F)
phone2 <- phone %>%
mutate(Clean = gsub("[A-Za-z].*", "", Numbers), #remove extensions
Clean = gsub("[^0-9]", "", Clean), #remove parentheses, dashes, etc
Clean = substr(Clean, nchar(Clean)-9, nchar(Clean)), #grab the right 10 characters
Clean = gsub("(^\\d{3})(\\d{3})(\\d{4}$)", "(\\1)\\2-\\3", Clean)) #format
phone2
我知道可能有更好的gsub() 命令,但就这个问题而言,我想知道是否有办法将这些gsub() 元素连接在一起,这样我就不必继续写@ 987654328@ 但也不必使用我将它们相互嵌入的方法。
如果你用一个更简单的例子回答这个问题,我会很好。
【问题讨论】:
-
使用
.,yake。也可以重新定义gsub2 <- function(x, ...) gsub(x = x, ...),这样你就可以做到data %>% gsub2('pat', 'repl') %>% gsub2('...','etc')