0

次のような data.table があります。

require(data.table)
require(stringi)

DT <- data.table(ID = c(1,2,3), Name =c("john peter", "joe", "Ann cathrine"))

名前の最初の文字とミドルネームも上にするように、名前列を操作したいと思います。

data.table(ID = c(1,2,3), Name =c("John Peter", "Joe", "Ann Cathrine"))

私のアプローチは次のとおりです。

  • 名前文字列を区切り文字 " " で分割します
  • 分割されたリストの各要素の最初の文字の上部
  • Paste with collapse を使用して、操作されたリスト要素を一緒に貼り付けます。

私はこれを両方で試し、ユーザー定義関数を使用しましdo.callた:lapplytoUpperFirst

DT[,  NameCapFirstTry   := paste0(do.call(toUpperFirst, stri_split_fixed(Name," ")), collapse = ' ')]

DT[,  NameCapSecondTry  := paste0(lapply(stri_split_fixed(Name," "),  toUpperFirst), collapse = ' ')]

toUpperFirst <- function (x){
  return (paste0(toupper(substring(x,1,1)), tolower(substring(x,2))))
}

何がうまくいかないのかよくわかりません。明らかに、分割はベクトルごとに適用するのではなく、列全体を使用します。これを修正する方法はありますか?

4

0 に答える 0