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

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

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

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

置換

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

Q&A

解決済

1回答

717閲覧

データフレーム内の要素の有無で"True""False"に置換したいです。

apple_marcie

総合スコア12

R

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

置換

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

0グッド

0クリップ

投稿2021/11/20 01:57

編集2021/11/20 02:16

前提・実現したいこと

Rで各行にテキストが入ったデータフレームを読み込む際、
NAを"False"、文字列がある(データが入っている)場合はすべての文章を削除して"True"という文言に置換したいです。
欠損値をFalseに置換することはできたのですが、
それ以外の、記述がある全ての行に対しての置換方法がわからず困っています。

具体的には、
csvファイルを読み込み、以下のようなデータフレームがあるとします。

df <- read.csv("temp.csv", stringsAsFactors = F, na.strings=c(' '))

index|text
1|おはようございます。
2|Na
3|こんにちは????
4|Na
5|Hello!

これに対して

df_prof_TF[is.na(df_prof_TF)] <- "False"

とすると、

1|おはようございます。
2|False
3|こんにちは????
4|False
5|Hello!

へと置換することはできたのですが、
この後、False以外の記述がある行全てを"True"に書き換えたいのです。

1|True
2|False
3|True
4|False
5|False

良い方法はございませんでしょうか。
ご教授よろしくお願いいたします。

試したこと

if文を使用したりして実現できないかと試行錯誤していましたが、
うまく定義できず実現できませんでした。
また、stringrライブラリのstr_replace_allで日本語に対応するメタ文字がないかと探しましたが、見つけられず…。
そもそも日本語だけではなく、あらゆる種類の文字全てを指定したいので、
これでは解決策にはならないかなと思っています。
とても横着ですが、"[\d\D]+"と指定すれば「半角数字全ての文字+半角数字以外の全ての文字」という意味になり、
実質的に「全ての文字」を対象にできるかもと考えたのですが、
当然実行されませんでした…。
完全にお手上げです。

置換ではなくても構いません。
データ量があるかないかで判断し、
データなしを"False"に、データありを"True"と読み込むことができれば
どんな方法でも大丈夫です。
よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

RStudio
2021.09.0 Build 351

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

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

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

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

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

guest

回答1

0

ベストアンサー

setAs で変換関数を定義して、read.csvcolClasses に指定します。

r

1setClass("true.false", contains=logical()) 2setAs("character", "true.false", function(from){ from != "" }) 3df <- read.csv("temp.csv", blank.lines.skip=F, colClasses = c("true.false")) 4print(df) 5 6# 7 text 81 TRUE 92 FALSE 103 TRUE 114 FALSE 125 TRUE

投稿2021/11/20 02:57

編集2021/11/20 03:37
melian

総合スコア19763

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

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

apple_marcie

2021/11/20 03:22

回答ありがとうございます! こちらを参考に実行したのですが、 もともと空欄であった列は省かれ、TRUEのみのdfが生成されてしまいました(元のcsvファイルは816行だったのに対し、こちらを実行後は697行まで減ってしまいました)。 どのようにすればよろしいでしょうか?
melian

2021/11/20 03:25 編集

質問には df <- read.csv("temp.csv", stringsAsFactors = F, na.strings=c(' ')) とありましたので、スペース2個の行を FALSE にするのだと思ったのですが、実際には空行なのでしょうか?
apple_marcie

2021/11/20 03:34

実際は空行だったのですが、 読み込む際にna.stirings = c(" ")と指定しました。 スペースは半角です。 こうするとdf上で空行がNa判定してもらえて、 df_Prof_TF[is.na(df_prof_TF)] <- "False"を実行することができました。 もしよろしければ、空行の(na.strings = " "を指定しない)状態を起点として教えていただけますでしょうか?
apple_marcie

2021/11/20 03:38

すみません、、今確認したところ、 na.stringsで指定した際はスペースをひとつも入れていませんでした。 スペースを入れずに指定することでNa判定してもらっています。
apple_marcie

2021/11/20 03:50

修正ありがとうございます!無事実装することができました???? 大変助かりました。本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問