r - 人名去大写(考虑 ' 和 -)

标签 r capitalize

我有一个(人类)名字的向量,全部用大写字母表示:

names <- c("FRIEDRICH SCHILLER", "FRANK O'HARA", "HANS-CHRISTIAN ANDERSEN")

到目前为止,要取消大写(仅大写第一个字母),我正在使用
simpleDecap <- function(x) {
  s <- strsplit(x, " ")[[1]] 
  paste0(substring(s, 1,1), tolower(substring(s, 2)), collapse=" ")
  }
sapply(names, simpleDecap, USE.NAMES=FALSE)
# [1] "Friedrich Schiller"         "Frank O'hara"         "Hans-christian Andersen"

但是我也想占'- .使用 s <- strsplit(x, " |\\'|\\-")[[1]]当然找到了正确的字母,但随后崩溃 '-迷路。因此,我试过
simpleDecap2 <- function(x) {
  for (char in c(" ", "\\-", "\\'")){
    s <- strsplit(x, char)[[1]] 
    x <-paste0(substring(s, 1,1), tolower(substring(s, 2)), collapse=char)
  } return x
  }

sapply(名称,simpleDecap,USE.NAMES=FALSE)

但这当然更糟,因为结果一个接一个地拆分:
sapply(names, simpleDecap2, USE.NAMES=FALSE)
# [1] "Friedrich schiller"      "Frank o'Hara"            "Hans-christian andersen"

我认为正确的方法是根据 s <- strsplit(x, " |\\'|\\-")[[1]] 进行拆分,但 paste=是问题所在。

最佳答案

这似乎有效,使用 Perl 兼容的正则表达式:

gsub("\\b(\\w)([\\w]+)", "\\1\\L\\2", names, perl = TRUE)
\L将以下匹配组转换为小写。

关于r - 人名去大写(考虑 ' 和 -),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32760308/

相关文章:

r - 如何为回归创建循环

php - 如何回显大写字母的文本?

php - 如何在 php 中对每个其他字符进行 CAPITaLiZe?

r - R CRAN 检查中的注意事项 -- * 检查顶级文件 ... 注意 如果未安装 ‘pandoc’,则无法检查文件 README.md

r 返回给定列中每个值的公共(public)行

r - 获取 Tensorflow 占位符的形状

Javascript函数将每个单词的第一个字母大写

mysql - 首字母大写。 MySQL

angularjs - 如何在 AngularJS 中自动将输入字段中的第一个字符大写?

R - 将空间频率数据绘制为矩阵