我正在用dplyr进行数据清理。 我想要做的一件事就是将某些列中的值大写。
data$surname
john
Mary
John
mary
...
我想我必须使用dplyr的 mutate 功能
titleCase <- function(x) {
+ s <- strsplit(as.character(x), " ")[[1]]
+ paste(toupper(substring(s, 1, 1)), substring(s, 2),
+ sep = "", collapse = " ")
+ }
但如何将两者结合起来?我得到各种错误或截断的数据框
由于
答案 0 :(得分:7)
我们可以使用sub
sub("(.)", "\\U\\1", data$surname, perl=TRUE)
#[1] "John" "Mary" "John" "Mary"
在dplyr
工作流程
library(dplyr)
data %>%
mutate(surname = sub("(.)", "\\U\\1", surname, perl=TRUE))
如果我们需要在多个列上执行此操作
data %>%
mutate_each(funs(sub("(.)", "\\U\\1", ., perl=TRUE)))
只是为了检查
res <- data1 %>%
mutate(surname = sub("(.)", "\\U\\1", surname, perl=TRUE))
sum(grepl("[A-Z]", substr(res$surname, 1,1)))
#[1] 500000
data <- data.frame(surname=c("john", "Mary", "John", "mary"),
firstname = c("abe", "Jacob", "george", "jen"), stringsAsFactors=FALSE)
data1 <- data.frame(surname = sample(c("john", "Mary", "John", "mary"),
500000, replace=TRUE), stringsAsFactors=FALSE)
答案 1 :(得分:5)
您可以尝试使用专用功能:
R.utils::capitalize(data$surname)
如果需要在dplyr
程序中实施,可以尝试以下方法:
library(dplyr)
library(R.utils)
data %>% mutate(surname = capitalize(surname))
答案 2 :(得分:2)
聚会晚了一点,但是您可以使用stringr
套餐
library(stringr)
library(dplyr)
example1 <- tibble(names = c("john" ,"Mary", "John", "mary"))
example1 %>%
mutate(names = str_to_title(names))
## names
## <chr>
## 1 John
## 2 Mary
## 3 John
## 4 Mary
如果您希望所有术语都大写,这仍然可以使用
example2 <- tibble(names = c("john james" ,"Mary carey", "John Jack", "mary Harry"))
example2 %>%
mutate(names = str_to_title(names))
## names
## <chr>
## 1 John James
## 2 Mary Carey
## 3 John Jack
## 4 Mary Harry
如果您只想将第一个词大写,str_to_sentence()
将起作用
example2 %>%
mutate(names = str_to_sentence(names))
## names
## <chr>
## 1 John james
## 2 Mary carey
## 3 John jack
## 4 Mary harry