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

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

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

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

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

Q&A

解決済

1回答

1875閲覧

Rで文字列を置換する際に条件分岐で行いたい

beij

総合スコア16

R

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

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

0グッド

0クリップ

投稿2017/11/05 09:13

アンケート調査を行っており、回答を処理しやすい形に置換しようとしております。
具体的には質問項目が「とても当てはまる」「少し当てはまる」「どちらでもない」「あまり当てはまらない」「まったく当てはまらない」のアンケート回答の内、「とても当てはまる」「少し当てはまる」を"positive"、「あまり当てはまらない」「まったく当てはまらない」を"negative"、「どちらでもない」を"none"の文字列に置換したいと考えています。

調べてみたところ文字列を置換する関数にはgsubなどがあるらしく、それを使って試してみたのですが*1、上述のような結果は得られませんでした。

そこで条件分岐を利用できたらと思ったのですが、if文やifelseをどのように組み込めばいいのかが分からず(これまで一回も使ったことがありませんでした)、調べてみても条件分岐を利用した文字列置換の方法が見つかりませんでした。

ご回答していただけると幸いです。
(条件分岐を使わなくてもできる方法がありましたらそちらでも問題ありません。)
よろしくお願いします。

*1
例えば
gsub(c("とても当てはまる","少し当てはまる"),"positive",test6)
gsub("とても当てはまる"|"少し当てはまる","positive",test6)
(test6はオブジェクト名)
などとやってみたのですが、いずれも「少し当てはまる」が変換されず、そもそも「どちらでもない」「あまり当てはまらない」「まったく当てはまらない」を置換するコードになっていませんでした

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

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

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

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

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

guest

回答1

0

ベストアンサー

条件判定式をごちゃごちゃ書くより「表引き」にしたほうがいいと思います。
以下のスクリプトでは、ベクトル型のオブジェクトanswerに元データが入っているものと仮定して、これをカテゴリー名に置き換えたオブジェクトanswer2を作っています。

前後の処理にもよりますが、おそらくデータはデータフレームで管理したほうがいいかもしれません。
ここでは判りやすさを重視して少し冗長な書き方をしてみました。

R

1#カテゴリー定義を表形式(matrix)で作っておく 2category <- matrix(c( 3 "とても当てはまる", "positive", 4 "少し当てはまる", "positive", 5 "あまり当てはまらない", "negative", 6 "まったく当てはまらない", "negative", 7 "どちらでもない", "none" 8 ), byrow=T, ncol=2 9) 10colnames(category) <- c("text","label") 11 12answer <- c( 13 "とても当てはまる", 14 "どちらでもない", 15 "あまり当てはまらない", 16 "あまり当てはまらない", 17 "とても当てはまる", 18 "どちらでもない", 19 "とても当てはまる", 20 "あまり当てはまらない", 21 "とても当てはまる", 22 "まったく当てはまらない", 23 "とても当てはまる", 24 "少し当てはまる" 25) 26answer2 <- c() 27 28#ラベル置換とその確認 29for(i in 1:length(answer)){ 30 label <- as.character(category[category[,"text"]==answer[i], "label"]) 31 print( 32 sprintf( 33 "%d: %s is %s", i, answer[i], label 34 ) 35 ) 36 answer2[i] <- label 37} 38 39#最終結果を出力してみる 40print(answer) 41print(answer2)

投稿2017/11/05 10:42

KojiDoi

総合スコア13671

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

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

beij

2017/11/05 12:27

ご回答ありがとうございます。 実際に試してみたところ確かに置き換えることができました。 まだまだ初心者なのでsprintfやfor文の扱い方など不慣れな部分はありますが、これらは自力で調べてみます。 今回はありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問