0Pricing
R Academy · レッスン

論理型と文字型の変換

as.logical()とas.character()を使い、logical、character、numericの間で変換します。

「論理型と文字型の変換」はCoddyKit上の無料R Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはR Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 R Academyコースには全4レッスンが含まれています。

型の相互変換

R には、基本型の間で変換するための as.*() 関数が用意されています。このレッスンでは、データクリーニングでよく行う logical、character、numeric 型の間の変換を扱います。

# Quick overview of as.*() functions
cat('as.logical(1):    ', as.logical(1), '
')     # TRUE
cat('as.numeric(TRUE): ', as.numeric(TRUE), '
')  # 1
cat('as.character(3.14):', as.character(3.14), '
') # "3.14"
cat('as.logical("TRUE"):', as.logical('TRUE'), '
') # TRUE

数値から論理値への変換

数値を logical に変換すると、0 は FALSE に、それ以外の数値は TRUE になります。この規則は integer と double の両方に適用されます。

cat('as.logical(0):    ', as.logical(0), '
')     # FALSE
cat('as.logical(1):    ', as.logical(1), '
')     # TRUE
cat('as.logical(-5):   ', as.logical(-5), '
')    # TRUE (non-zero)
cat('as.logical(0.001):', as.logical(0.001), '
') # TRUE (non-zero)
cat('as.logical(0L):   ', as.logical(0L), '
')    # FALSE
cat('as.logical(3L):   ', as.logical(3L), '
')    # TRUE

論理値から数値への変換

TRUE は 1 に、FALSE は 0 に変換されます。この変換は、sum() で TRUE の個数を数えたり、mean() で割合を計算したりするなど、多くの R の慣用表現の基礎になっています。

cat('as.numeric(TRUE):  ', as.numeric(TRUE), '
')   # 1
cat('as.numeric(FALSE): ', as.numeric(FALSE), '
')  # 0
cat('as.integer(TRUE):  ', as.integer(TRUE), '
')   # 1L

# Practical use: count TRUEs by summing
passed <- c(TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
cat('Passed count:', sum(as.numeric(passed)), '
')  # 4
cat('Pass rate:   ', mean(passed) * 100, '%
')      # 66.67%

文字列から as.logical() への変換

as.logical('TRUE') と as.logical('FALSE') は、文字列による表現を変換します。R は省略形として 'T' と 'F' も受け付けます。それ以外(小文字の 'true' を含む)は NA を返します。

cat('as.logical("TRUE"):  ', as.logical('TRUE'), '
')   # TRUE
cat('as.logical("FALSE"): ', as.logical('FALSE'), '
')  # FALSE
cat('as.logical("T"):     ', as.logical('T'), '
')      # TRUE
cat('as.logical("F"):     ', as.logical('F'), '
')      # FALSE
cat('as.logical("yes"):   ', as.logical('yes'), '
')    # NA (not recognised)
cat('as.logical("true"):  ', as.logical('true'), '
')   # NA (case-sensitive!)

数値から文字列への変換

as.character(x) は数値を文字列表現に変換します。ラベルや ID の作成、数値を文字列に連結する必要がある場合に便利です。

num_val <- 3.14159
char_val <- as.character(num_val)
cat('as.character(3.14159):', char_val, '
')  # '3.14159'
cat('class:', class(char_val), '
')           # character

# Building labels
ids <- 1:5
labels <- paste0('Item_', as.character(ids))
cat('Labels:', labels, '
')

文字列から数値への変換

as.numeric('3.14') は文字列を解析して double に変換します。文字列を数値として解釈できない場合、R は警告とともに NA を返します。実運用のコードでは、変換前に必ず入力を検証してください。

cat('as.numeric("3.14"):  ', as.numeric('3.14'), '
')   # 3.14
cat('as.numeric("100"):   ', as.numeric('100'), '
')    # 100
cat('as.numeric("-5.5"):  ', as.numeric('-5.5'), '
')   # -5.5
cat('as.numeric("abc"):   ', as.numeric('abc'), '
')    # NA with warning
cat('as.numeric("1e3"):   ', as.numeric('1e3'), '
')    # 1000 (sci notation OK)

論理値から文字列への変換

as.character(TRUE) は 'TRUE' という文字列を生成します。論理値をテキスト出力、ファイルへのエクスポート、文字列の連結に含める必要がある場合に便利です。

flag_t <- TRUE
flag_f <- FALSE

cat('as.character(TRUE): ', as.character(flag_t), '
')  # 'TRUE'
cat('as.character(FALSE):', as.character(flag_f), '
')  # 'FALSE'
cat('class:', class(as.character(flag_t)), '
')         # character

# In paste()
message <- paste('System status:', as.character(flag_t))
cat(message, '
')

ラウンドトリップ変換

ほとんどの変換はラウンドトリップで元に戻せますが、一部の情報は失われる可能性があります。numeric -> character -> numeric では、数値を文字列としてどのように整形するかによって精度が失われることがあります。

original <- 3.141592653589793
char_version <- as.character(original)
back_to_num <- as.numeric(char_version)

cat('Original:  ', original, '
')
cat('As string: ', char_version, '
')
cat('Back:      ', back_to_num, '
')
cat('Identical?:', identical(original, back_to_num), '
')
cat('Equal?:    ', original == back_to_num, '
')

異なる由来の要素が混在するベクトルの変換

character ベクトルに as.numeric() を適用すると、各要素が個別に変換されます。解析できない要素は NA になります。これは CSV ファイルから読み込んだ数値らしいデータをクリーニングする標準的な方法です。

# Simulated data from CSV (all read as character)
raw_data <- c('42', '37.5', 'N/A', '55', '', '28.0')
cat('Raw character data:', raw_data, '
')

numeric_data <- suppressWarnings(as.numeric(raw_data))
cat('Converted:         ', numeric_data, '
')  # 42 37.5 NA 55 NA 28
cat('NA count:          ', sum(is.na(numeric_data)), '
')

ifelse() での論理値変換

as.numeric() と ifelse() を組み合わせたり、logical ベクトルを直接乗算したりする方法は、データ分析で条件付きスコアリングや特徴量エンジニアリングを行う際によく使われる慣用表現です。

# Score: 1 for correct, 0 for incorrect
quiz_answers <- c('A', 'C', 'B', 'D', 'B')
correct      <- c('A', 'B', 'B', 'D', 'C')

is_correct <- quiz_answers == correct
cat('Correct:  ', is_correct, '
')
cat('As 0/1:   ', as.numeric(is_correct), '
')
cat('Score:    ', sum(is_correct), '/', length(is_correct), '
')

変換のまとめ

logical と character の主な変換をまとめます。

  • as.logical(0) → FALSE、0 以外 → TRUE
  • as.logical('TRUE'/'T') → TRUE。大文字と小文字を区別し、それ以外 → NA
  • as.numeric(TRUE) → 1、as.numeric(FALSE) → 0
  • as.character(x) → x の文字列表現
  • as.numeric('3.14') → 3.14。数値でない文字列 → 警告とともに NA
# All conversions in one snippet
cat('logical->num:  ', as.numeric(c(TRUE, FALSE)), '
')
cat('num->logical:  ', as.logical(c(0, 1, -1, 0.5)), '
')
cat('char->num:     ', suppressWarnings(as.numeric(c('5', 'abc', '3.1'))), '
')
cat('char->logical: ', as.logical(c('TRUE', 'FALSE', 'yes')), '
')
cat('logical->char: ', as.character(c(TRUE, FALSE)), '
')

理解度チェック

R で as.numeric(TRUE) + as.numeric(FALSE) は何と評価されますか?

復習: 論理値と文字列の変換

すばらしいです!このレッスンの重要なポイントは次のとおりです。

  • as.logical(0) → FALSE、0 以外 → TRUE、'TRUE'/'T' → TRUE
  • as.numeric(TRUE) → 1、as.numeric(FALSE) → 0
  • as.character(x) は任意の値を文字列表現に変換します
  • as.numeric('3.14') は数値文字列を解析し、無効な文字列 → NA になります
  • as.logical('true') は NA です。大文字と小文字が区別されるためです('TRUE' は機能します)
  • 変換はほぼ可逆ですが、NA になることが想定される列を変換する場合は suppressWarnings() を使用してください
# Practical: parse a messy survey score column
raw_scores <- c('8', '7', 'N/A', '9', 'skip', '6')
numeric_scores <- suppressWarnings(as.numeric(raw_scores))
cat('Parsed:', numeric_scores, '
')
cat('Valid responses:', sum(!is.na(numeric_scores)), '
')
cat('Average score:  ', round(mean(numeric_scores, na.rm = TRUE), 2), '
')

よくある質問

「論理型と文字型の変換」レッスンは無料ですか?

はい。「論理型と文字型の変換」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、R Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 R Academyコースには全4レッスンが含まれています。

「論理型と文字型の変換」で何を学びますか?

as.logical()とas.character()を使い、logical、character、numericの間で変換します。 ブラウザで直接実行するハンズオンコードでR Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

R Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのR Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「論理型と文字型の変換」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このR Academyレッスンでコードを書いて実行できますか?

はい。すべてのR Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Rの型システム概説
  2. 数値型間の変換
  3. 論理型と文字型の変換
  4. 強制変換の落とし穴とベストプラクティス
← R Academyに戻る