在函数内使用Dplyr和Tidyr来大写数据框列中的名字和姓氏

时间:2016-08-15 22:09:33

标签: r dplyr tidyr purrr

Names <- c("SUSAN,ALTOP","Brent,SPINER","KIM,YAMAGUCHI","John,McMurphy","Kevin,Y")
City <- c("Toronto","New York","Chicago","Toronto","Tokyo")
DF <- data.frame(Names,City)

我希望创建一个函数,将上面简单示例数据框中的名字和姓氏大写,以便名称读作&#34; Susan Altop&#34;,&#34; Brent Spiner& #34; ...等。 (请注意,我也删除了逗号。)

我可以使用以下代码单独或使用管道来完成此操作。但是我希望创建一个函数,因为我必须多次这样做,但我不知道在使用dplyr,tidyr等时怎么做。我也是如果可能的话,可以使用列表和purrr获得更多创意建议。

DF <- DF %>% separate(DF,Names,c("First","Last",sep=","),remove=TRUE)
DF <- DF %>% mutate_each(funs(tolower),First,Last)
DF <- DF %>% mutate_each(funs(Capitalize),First,Last)
DF <- DF %>% mutate(NewNames=paste0(First," ",Last)

1 个答案:

答案 0 :(得分:4)

来自stri_trans_totitle软件包的stringi函数似乎可以满足您的需求:

library(dplyr); library(stringi)
DF %>% mutate(Names = stri_trans_totitle(gsub(",", " ", Names)))

#           Names     City
# 1   Susan Altop  Toronto
# 2  Brent Spiner New York
# 3 Kim Yamaguchi  Chicago
# 4 John Mcmurphy  Toronto
# 5       Kevin Y    Tokyo

或者使用str_to_title中的stringr

library(stringr)
DF %>% mutate(Names = str_to_title(gsub(",", " ", Names)))

#           Names     City
# 1   Susan Altop  Toronto
# 2  Brent Spiner New York
# 3 Kim Yamaguchi  Chicago
# 4 John Mcmurphy  Toronto
# 5       Kevin Y    Tokyo