質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

1回答

2957閲覧

連続変数からcase_whenで3つに分類されたカテゴリを作りたい。

monaa

総合スコア11

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2020/05/22 00:32

前提・実現したいこと

Rで、numで表示される連続変数を、3分類のカテゴリ変数へ変換したいのですが
うまくいきません。

発生している問題

すべての"連続変数"内の数値が、カテゴリ"ko.x" に変換され、 期待していた3カテゴリに分類されない。 chr [1:500] "ko.x" "ko.x" "ko.x" "ko.x" "ko.x" "ko.x" ・・・・

該当のソースコード

tidyverse

1df %>% mutate (newvariable = 2 case_when ( "連続変数" <= -15 ~ "tei.x", 3 "連続変数" > -15 & "連続変数" < 15 ~ "chu.x", 4 "連続変数" >= 15 ~ "ko.x")) -> df 5 6glimpse(df$newvariable)

試したこと

・コードをcut関数で書き直してもうまくいかなかった。
・本やネットでも調べたが、うまく回せなかった。
・上の3分類の場合、NAは自然と落ちるのかどうかも知りたい。

補足情報

パッケージはtidyverse、dplyrを使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

case_whenの外にfactor()を置けばいいのでは?

コメントを受けて

難しく考えることはないと思います。

library(dplyr) df <- data.frame(a=seq(-20,20,6)) df %>% mutate(newvariable = case_when( a <= -15 ~ "X", a > -15 & a < 15 ~ "Y", a >=15 ~ "C" )) -> df df %>% mutate(newvariable2 = factor(case_when( a <= -15 ~ "X", a > -15 & a < 15 ~ "Y", a >=15 ~ "C" ))) -> df

実行結果

> df a newvariable newvariable2 1 -20 X X 2 -14 Y Y 3 -8 Y Y 4 -2 Y Y 5 4 Y Y 6 10 Y Y 7 16 C C > str(df) 'data.frame': 7 obs. of 3 variables: $ a : num -20 -14 -8 -2 4 10 16 $ newvariable : chr "X" "Y" "Y" "Y" ... $ newvariable2: Factor w/ 3 levels "C","X","Y": 2 3 3 3 3 3 1 >

投稿2020/05/22 08:11

編集2020/05/23 17:03
KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

monaa

2020/05/23 06:11 編集

返答が遅くなり、申し訳ありません。 ご助言どうもありがとうございます! df %>% mutate (newvariable = factor("連続変数", case_when ("連続変数" < 15 ~ "tei.x", "連続変数" >= 15 ~ "chu.x" ), levels=c("tei.x", "chu.x" ))) -> df でやってみました。(2値に変更しましたがやりたいことは同一) 結果として、オブジェクトはfactorになりました。 しかし、やはりオブジェクト内ベクトルはすべて"chu.x" の繰り返しになりました。 (データが手元になく、エラーメッセージを失念してしまいました。) いちおう回ったで、もし式におかしい所がないとすると、 別の何が問題の可能性として挙がるか検討がつかず、 お手数ですが、ご存知でしたらご指摘頂けるとありがたいです。 どうぞよろしくお願いします。
monaa

2020/05/25 04:07

詳しくご回答頂いてありがとうございます。 返信が大変遅くなり、申し訳ございません。 分解して教えてくださり、理解が進みました! また、1つ前のご助言も同様に感謝します。 またご質問させていただくこともあると思いますが、 何卒よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問