複数の列名の一発置換方法

複数の列に対して集計処理をいっぺんにやる方法


で出力された列名には、合計の場合、”_sum”が付加されますが、これらの複数の列名を合計に置換する方法はあるのでしょうか?
金額1_sum, 金額2_sum → 金額1_合計, 金額2_合計
といったイメージです。

高橋

@Hitoshi_Takahashi さん

rename_at()の関数を使うか、このようなカスタムスクリプト関数を定義し、カスタムRコマンドを使用する方法はいかがでしょうか。

rename_at()の場合

rename_at(vars(ends_with("sum")), 
          ~ stringr::str_replace(., pattern = "sum", replacement = "合計"))

・カスタムスクリプトの場合

name_replace <- function(data, pattern, replacement){
  nm <- names(data)
  nm_post <- stringr::str_replace(nm, pattern = pattern, replacement = replacement)
  names(data) <- nm_post  
  data
}

summarise_**()の関数の後の、変数名に**_sumが付与されるデータだけではなく、他のデータでも使えるよな関数にしています。名前を好きなパターンで検索し、置換できるような感じです。

下記のサンプルデータにはhoge_sum以外のカラム名を意図的に混ぜました。

・適用前のデータ
16

・関数適用後のデータ
27

ご確認いただけますと幸いです。

「いいね!」 2

わさびさん

ありがとうございます。
rename_at(vars(ends_with(“sum”)),
~ stringr::str_replace(., pattern = “sum”, replacement = “合計”))
をカスタムRスクリプトに入れたら、動きました。

一方、name_replace <- から始まるスクリプトをカスタムRスクリプトに入れた(Pattern)のですが、
Error in データフレーム名_ %>% name_replace <- function(data, : could not find function “%>%<-”
となってしまい、よくわからない状態でした。
(Rスクリプトを使いこなせないので、スクリプトの記載が正しいか否かは分からないのですが・・。)

前者で今のところ、対処できそうです。
ありがとうございました。

@Hitoshi_Takahashi さん

問題が解決したようでよかったです。
私の環境(Version:5.4.2.4_WIN_PUBLIC (Production))では、エラーがでなかったので、理由の解明はできませんが、
下記の手順でいけてました。

お手すきの際にご確認いただけますと幸いです。

  • ①データの読み込み
    4

  • ②関数の定義
    3

  • ③カスタムRコマンドで実行
    2

  • ④関数実行後のデータ
    5

よろしくお願いいたします!

#---------------------------------------------------------
追記
#---------------------------------------------------------
エラーの原因がわかったかもしれません。

もしかすると「カスタムRコマンド」のステップからname_replace()を実行されましたでしょうか?この場合は同様のエラーがでるので、name_replace()を使う場合は、画面左端の「スクリプト」で関数を保存してから、上記の③のように「カスタムRコマンド」で実行してみてください。エラーなく行けるはずです。

1

2

何かあればお気軽に聞いていただければと思います!

わさびさん

スクリプトを入れる場所が間違っていました・・:baby:

結論から言えば、わさびさんのコメントにあるように、スクリプト内で関数の定義を行い、カスタムRコマンド内でコマンドを入力することで、エラー無く、実行できました。

関数の定義と関数の実行に関わるコマンドの区別が私の方で、でできていなかったようです。

集計処理をいっぺんにやる方法のあとは、列名をいっぺんにやる方法を理解しておいた方が良いことが分かりました。
でも、この方法は、集計処理以外にも、システムから吐き出された規則性のある列名をいっぺんに変換する場合などに使えそうです。

お聞きしてよかったです!!
ありがとうございました。

高橋

「いいね!」 2

@Hitoshi_Takahashi さん

問題が解決されたようで、よかったです。

私の方でもExplratoryのUIから簡単にできないかどうか調べてみましたが、
おそらくできなさそうなので、こちらの方法で変数名を変更するのがよいかもしれません。
※ExplratoryのUIを探しきれていないかもしれないですが…

また、何かあればお気軽にどうぞ~!
引き続きよろしくお願いいたします。