如何将CamelCase转换为R中的not.camel.case

时间:2014-03-20 09:30:08

标签: r

在R中,我想转换

c("ThisText", "NextText")

c("this.text", "next.text")

这与this SO question相反,与this one相反,但在R中使用点而不是PHP中的下划线。

3 个答案:

答案 0 :(得分:11)

不清楚整套规则是什么,但我们假设

  • 我们应该在小写字母之后小写任何大写字符并在它们之间插入一个点并且
  • 小写字符串的第一个字符,如果小写字符成功。

为此,我们可以使用subgsub的perl正则表达式:

# test data
camelCase <-  c("ThisText", "NextText", "DON'T_CHANGE")


s <- gsub("([a-z])([A-Z])", "\\1.\\L\\2", camelCase, perl = TRUE)
sub("^(.[a-z])", "\\L\\1", s, perl = TRUE) # make 1st char lower case

,并提供:

[1] "this.text"    "next.text"    "DON'T_CHANGE"

答案 1 :(得分:7)

您也可以通过snakecase包执行此操作:

install.packages("snakecase")
library(snakecase)

to_snake_case(c("ThisText", "NextText"), sep_out = ".")
# [1] "this.text" "next.text"

Github链接到包:https://github.com/Tazinho/snakecase

答案 2 :(得分:3)

您可以将所有大写字母替换为自己,将前一个点替换为gsub,将所有tolowersubstr更改为初始点:

x <- c("ThisText", "NextText", "LongerCamelCaseText")

substr(tolower(gsub("([A-Z])","\\.\\1",x)),2,.Machine$integer.max)
[1] "this.text"              "next.text"              "longer.camel.case.text"