25

Rでは変換したい

t1 <- c('this.text', 'next.text')
"this.text" "next.text"

'ThisText' 'NextText'

私が試してみました

gsub('\\..', '', t1)

しかし、これは私に与えます

"thisext" "nextext"

ピリオドの後に文字を置き換えることはありません。

おそらく本当に簡単ですが、私はそれを解決することはできません。

4

6 に答える 6

23

または、正規表現ベースのソリューション:

t1 <- c('this.text', 'next.text')

# capitalize first letter
t2 <- sub('^(\\w?)', '\\U\\1', t1, perl=T)

# remove points and capitalize following letter
gsub('\\.(\\w?)', '\\U\\1', t2, perl=T)
[1] "ThisText" "NextText"

編集:いくつかの説明

sub('^(\\w?)', '\\U\\1', t1, perl=T)sub最初の一致のみに関心があるため、ここでは十分です。次に、各文字列の先頭にある最初の英数字が^(\\w?). 関数の置換部分での後方参照には、括弧が必要です。置換\\Uは、その後に続くすべてのもの (最初の文字) を大文字にするために使用されます。

同じ原則が適用されgsub('\\.(\\w?)', '\\U\\1', t2, perl=T)ますが、最初の文字ではなくすべての..

于 2012-07-26T15:39:42.027 に答える
9

tocamelrapportoolsパッケージからあなたが望むことをします:

> library(rapportools)
> example(tocamel)

tocaml> tocamel("foo.bar")
tocaml>     ## [1] "fooBar"
tocaml> 
tocaml>     tocamel("foo.bar", upper = TRUE)
tocaml>     ## [1] "FooBar"
tocaml> 
tocaml>     tocamel(c("foobar", "foo.bar", "camel_case", "a.b.c.d"))
tocaml>     ## [1] "foobar"    "fooBar"    "camelCase" "aBCD"
tocaml> 

更新しました:

もう1つの簡単で高速なソリューション(@rengisなど):

camel2 <- function(x) {
    gsub("(^|[^[:alnum:]])([[:alnum:]])", "\\U\\2", x, perl = TRUE)
}
camel2(t1)
#> [1] "ThisText" "NextText"

@TylerRinker ソリューションとの比較:

identical(camel(t1), camel2(t1))
#> [1] TRUE
microbenchmark::microbenchmark(camel(t1), camel2(t1))
#> Unit: microseconds
#>        expr    min      lq     mean  median      uq     max neval cld
#>   camel(t1) 76.378 79.6520 82.21509 81.5065 82.7095 151.867   100   b
#>  camel2(t1) 15.864 16.9425 19.76000 20.9690 21.9735  38.246   100  a
于 2014-11-29T19:53:13.060 に答える
5

ここでは、snakecase パッケージによる別のソリューション:

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

to_upper_camel_case(t1)
#> [1] "ThisText" "NextText"

Github リンク: https://github.com/Tazinho/snakecase

于 2017-03-25T22:01:03.133 に答える
2

janitorパッケージのmake_clean_names()関数には、 これに使用できる関数があります。

あなたの場合:

t1 <- c('this.text', 'next.text')
janitor::make_clean_names(t1, case = "big_camel")
#> [1] "ThisText" "NextText"

パラメータcaseは、次のいずれかになります。

“snake”, “small_camel”, “big_camel”, “screaming_snake”, “parsed”, “mixed”, “lower_upper”, “upper_lower”, “swap”, “all_caps”, “lower_camel”, “upper_camel”, “internal_parsing”, “none”, “flip”, “sentence”, “random”, “title”

reprex パッケージ(v2.0.1)により 2021-10-13 に作成

于 2021-10-13T10:19:59.937 に答える