web-dev-qa-db-ja.com

DplyrまたはMagrittr-tolower?

Dplyrまたはmagrittrチェーン内ですべての列名を上位または下位に設定することは可能ですか?

以下の例では、データをロードしてから、magrittrパイプを使用して、それをdplyrミューテーションにチェーンします。 4行目では、tolower関数を使用していますが、これは別の目的です。小文字の観測値を使用して新しい変数を作成することです。

mydata <- read.csv('myfile.csv') %>%
    mutate(Year = mdy_hms(DATE),
           Reference = (REFNUM),
           Event = tolower(EVENT)

私は明らかにcolnames = tolowerのようなものを探していますが、これが機能しない/存在しないことを知っています。

Dplyr rename関数に注意しますが、これはあまり役に立ちません。

Magrittrのcolnameオプションは次のとおりです。

ベースRの代わりにset_colnamescolnames<-
set_namesベースRの代わりにnames<-

私はこれらで多くの順列を試しましたが、サイコロはありません。

明らかに、これはベースrでは非常に単純です。

names(mydata) <- tolower(names(mydata))

ただし、dplyr/magrittrコードのエレガントなチェーンに進む前に、不格好なワンライナーとしてそれを行う必要があるという dplyr / magrittr の哲学とは一致しないようです。 。

18
RDJ

magrittrの「複合代入パイプ演算子」を使用する%<>%あなたの質問を正しく理解していれば、さらに簡潔な選択肢かもしれません。

library("magrittr")
names(iris) %<>% tolower

?`%<>%` # for more
19
Kevin

dplyrでこれが可能になりました:

mydata %>% rename_all(tolower)
43
iris %>% setNames(tolower(names(.))) %>% head

または、同等に非置換形式で置換機能を使用します。

iris %>% `names<-`(tolower(names(.))) %>% head
iris %>% `colnames<-`(tolower(names(.))) %>% head  # if you really want to use `colnames<-`
23
BrodieG
_mtcars %>% 
set_colnames(value = casefold(colnames(.), upper = FALSE)) %>% 
head
_

casefoldはベースRで使用でき、両方向に変換できます。つまり、必要に応じて、フラグupperを使用して、すべて大文字またはすべて小文字に変換できます。

また、colnames()は、大文字と小文字の変換に列ヘッダーのみを使用します。

2
Frash

関数を定義することもできます。

upcase <- function(df) {
  names(df) <- toupper(names(df))
  df
}

library(dplyr)

mtcars %>% upcase %>% select(MPG)
1
Carl