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_colnames
colnames<-
set_names
ベースRの代わりにnames<-
私はこれらで多くの順列を試しましたが、サイコロはありません。
明らかに、これはベースrでは非常に単純です。
names(mydata) <- tolower(names(mydata))
ただし、dplyr/magrittrコードのエレガントなチェーンに進む前に、不格好なワンライナーとしてそれを行う必要があるという dplyr / magrittr の哲学とは一致しないようです。 。
magrittr
の「複合代入パイプ演算子」を使用する%<>%
あなたの質問を正しく理解していれば、さらに簡潔な選択肢かもしれません。
library("magrittr")
names(iris) %<>% tolower
?`%<>%` # for more
dplyr
でこれが可能になりました:
mydata %>% rename_all(tolower)
iris %>% setNames(tolower(names(.))) %>% head
または、同等に非置換形式で置換機能を使用します。
iris %>% `names<-`(tolower(names(.))) %>% head
iris %>% `colnames<-`(tolower(names(.))) %>% head # if you really want to use `colnames<-`
_mtcars %>%
set_colnames(value = casefold(colnames(.), upper = FALSE)) %>%
head
_
casefold
はベースRで使用でき、両方向に変換できます。つまり、必要に応じて、フラグupper
を使用して、すべて大文字またはすべて小文字に変換できます。
また、colnames()
は、大文字と小文字の変換に列ヘッダーのみを使用します。
関数を定義することもできます。
upcase <- function(df) {
names(df) <- toupper(names(df))
df
}
library(dplyr)
mtcars %>% upcase %>% select(MPG)