【问题标题】:R capitalize roman numerals only in stringR 仅在字符串中大写罗马数字
【发布时间】:2020-10-29 05:50:10
【问题描述】:

如果我有一个包含以下内容的向量:

people <- c("PERSON I", "PERSON II", "PERSON III", "PERSON IV")

为了将它们变成标题大小写,我使用了以下内容:

people <- str_to_title(people)

现在我有以下内容

> people
[1] "Person I"   "Person Ii"  "Person Iii" "Person Iv"  

罗马数字只有这样大写怎么办?

"Person I"   "Person II"   "Person III"   "Person IV" 

或者有没有办法在不使用str_to_title的情况下将全大写转换为最后一个向量?

【问题讨论】:

    标签: r gsub stringr regexp-replace


    【解决方案1】:

    这是使用 substrsubpaste 的基本 R 选项:

    people <- c("PERSON I", "PERSON II", "PERSON III", "PERSON IV")
    people <- paste0(substr(people, 1, 1), tolower(sub("^\\S(\\S+).*$", "\\1", people)),
                     " ", sub("^.*?(\\S+)$", "\\1", people))
    people
    
    [1] "Person I"   "Person II"  "Person III" "Person IV"
    

    【讨论】:

    • 如果 1. 罗马数字前面的字符串有空格,并且 2. 如果不是所有字符串都有罗马数字,我将如何处理?people &lt;- c("JOHN SMITH I", "MARY SUE II", "JOHN F KENNEDY III", "DWAYNE THE ROCK JOHNSON IV", "SOME GUY)?
    • 这真的是一个完全不同的问题。
    【解决方案2】:

    如果格式始终相同,即两个单词用空格隔开,您可以使用以下内容:

    sapply(strsplit(people,' '), function(X){paste(str_to_title(X[1]), X[2]) })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多