12

同僚、

以下の抜粋に似たデータ フレームを見ています。

Month   Provider Items
January CofCom   25
july    CofCom   331
march   vobix    12
May     vobix    0

各単語の最初の文字を大文字にし、各単語の残りの文字を小文字にしたいと思います。これにより、以下のようなデータ フレームが生成されます。

Month   Provider Items
January Cofcom   25
July    Cofcom   331
March   Vobix    12
May     Vobix    0

一言で言えば、MS Excel で利用可能なROPER関数に相当する R の関数を探しています。

4

4 に答える 4

12

質問はExcelに相当するものでPROPERあり、(以前の)受け入れられた回答は以下に基づいています:

proper=function(x) paste0(toupper(substr(x, 1, 1)), tolower(substring(x, 2)))

次の点に注意してください。

proper("hello world")
## [1] "Hello world"

代わりに、 ExcelPROPERは "Hello World" を返します。Excel での 1:1 マッピングについては、@Matthew Plourde を参照してください。

実際に必要なのは、文字列の最初の文字のみを大文字に設定することである場合は、短くてわずかに高速なバージョンも検討できます。

proper=function(s) sub("(.)", ("\\U\\1"), tolower(s), pe=TRUE)
于 2016-03-02T16:55:18.657 に答える
9

別の方法では、stringi パッケージを使用します。stri_trans_general 関数は、頭文字以外のすべての文字を小文字にするように見えます。

require(stringi)
x <- c('woRd Word', 'Word', 'word words')
stri_trans_general(x, id = "Title")
[1] "Word Word"  "Word"       "Word Words"
于 2014-07-25T16:43:41.720 に答える
5

あるとは思いませんが、自分で簡単に書くことができます

(dat <- data.frame(x = c('hello', 'frIENds'),
                   y = c('rawr','rulZ'),
                   z = c(16, 18)))
#         x    y  z
# 1   hello rawr 16
# 2 frIENds rulZ 18

proper <- function(x)
  paste0(toupper(substr(x, 1, 1)), tolower(substring(x, 2)))


(dat <- data.frame(lapply(dat, function(x)
  if (is.numeric(x)) x else proper(x)),
  stringsAsFactors = FALSE))

#         x    y  z
# 1   Hello Rawr 16
# 2 Friends Rulz 18

str(dat)
# 'data.frame':  2 obs. of  3 variables:
#   $ x: chr  "Hello" "Friends"
#   $ y: chr  "Rawr" "Rulz"
#   $ z: num  16 18
于 2014-07-25T13:21:43.263 に答える