【问题标题】:How to capitalize all but some letters in R如何在R中大写除某些字母外的所有字母
【发布时间】:2016-08-30 10:54:50
【问题描述】:

我在 R 中有一个带有一列字符串的数据框,例如v1 <- c('JaStADmmnIsynDK', 'laUksnDTusainS')

我的目标是将每个字符串中除“s”、“t”和“y”之外的所有字母大写。

所以结果最终应该是:“JAStADMMNIsyNDK”和“LAUKsNDTUsAINS”。

因此不会改变任何上述字母:“s”、“t”和“y”。

到目前为止,我只需要 25 倍就可以做到这一点

levels(df$strings) <- sub('n', 'N', levels(df$strings))

但这似乎有点矫枉过正!我怎样才能在 R 中轻松做到这一点?

【问题讨论】:

  • 当然,抱歉 - 时间不早了。

标签: r replace uppercase lowercase capitalization


【解决方案1】:

试试

v2 <- gsub("[sty]", "", paste(letters, collapse="")) 
chartr(v2, toupper(v2), v1)
#[1] "JAStADMMNIsyNDK" "LAUKsNDTUsAINS" 

数据

v1 <- c("JaStADmmnIsynDK", "laUksnDTusainS")

【讨论】:

  • 太棒了 - 谢谢。下次我记得用数据示例划一条线。
  • 我不知道为什么@Thigers 不接受您的解决方案并接受了我的解决方案。我自己也很惊讶。我个人认为您的解决方案要好得多。
  • 作为一个在 StackOverflow 上发布问题的完整新手,我试图接受这两个答案,因为我渴望实际收到反馈。很抱歉,谢谢你们俩的解决方案。干杯。
  • @smci 我会使用gsub('([a-ru-xz])', '\\U\\1'), v1, perl = TRUE)
  • @Akrun 啊,谢谢。 '\U' 运算符。我会将其作为替代方法发布并感谢您。
【解决方案2】:

@akrun 发布的答案确实很棒。但这是我更直接的蛮力方法,但我完成得太晚了。

s <- "JaStADmmnIsynDK"

customUpperCase <- function(s,ignore = c("s","t","y")) {
  u <- sapply(unlist(strsplit(s,split = "")),
              function(x) if(!(x %in% ignore)) toupper(x) else x )
  paste(u,collapse = "")
}

customUpperCase(s)
#[1] "JAStADMMNIsyNDK"

【讨论】:

    【解决方案3】:

    我们可以直接gsub() 对每个适用的小写字母进行大写替换,在 '\1' 捕获组上使用 perl '\U' 运算符(@Akrun 提醒了这一点):

    v1 <- c("JaStADmmnIsynDK", "laUksnDTusainS")
    gsub('([a-ru-xz])', '\\U\\1'), v1, perl = TRUE)
    "JAStADMMNIsyNDK" "LAUKsNDTUsAINS"
    

    【讨论】:

      猜你喜欢
      • 2017-08-26
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多