grepとstr_extractで文字列から数字を抽出する
Rで文字列から整数を抽出する方法
grepとstr_extract
grep
とstr_extract
は、正規表現を用いて文字列からパターンを抽出する関数です。
# 文字列
str <- "abc123def456"
# grepで数字のみ抽出
grep("[0-9]+", str)
# str_extractで数字のみ抽出
library(stringr)
str_extract(str, "[0-9]+")
scan
scan
は、文字列から指定された形式のデータを抽出する関数です。
# scanで数字のみ抽出
scan(text = str, what = character(), quiet = TRUE)
# scanで数字を数値型に変換
scan(text = str, what = numeric(), quiet = TRUE)
sub
sub
は、文字列中のパターンを置換する関数です。
# subで数字以外を空文字に置換
sub("[^0-9]", "", str)
str_replace_all
str_replace_all
は、文字列中のパターンを置換する関数です。
library(stringr)
str_replace_all(str, "[^0-9]", "")
as.numeric
as.numeric
は、文字列を数値型に変換する関数です。
# 文字列を数値型に変換
as.numeric(str)
Rで文字列から整数を抽出するには、いくつかの方法があります。どの方法を使うかは、データの形式や目的によって異なります。
データフレームの場合
データフレームの場合、apply
関数などを用いて列ごとに上記の処理を行うことができます。
# データフレーム
df <- data.frame(col1 = c("abc123", "def456"))
# 各列の数字のみ抽出
df$col1 <- lapply(df$col1, function(x) grep("[0-9]+", x))
# 文字列
str <- "abc123def456"
# grepで数字のみ抽出
grep("[0-9]+", str)
# 出力
[[1]]
[1] 123 456
# str_extractで数字のみ抽出
library(stringr)
str_extract(str, "[0-9]+")
# 出力
[[1]]
[1] "123" "456"
# scanで数字のみ抽出
scan(text = str, what = character(), quiet = TRUE)
# 出力
[1] "123" "456"
# scanで数字を数値型に変換
scan(text = str, what = numeric(), quiet = TRUE)
# 出力
[1] 123 456
# subで数字以外を空文字に置換
sub("[^0-9]", "", str)
# 出力
[1] "123456"
library(stringr)
str_replace_all(str, "[^0-9]", "")
# 出力
[1] "123456"
# 文字列を数値型に変換
as.numeric(str)
# 出力
[1] NA
# 文字列が数値のみの場合は変換可能
str <- "123456"
as.numeric(str)
# 出力
[1] 123456
# データフレーム
df <- data.frame(col1 = c("abc123", "def456"))
# 各列の数字のみ抽出
df$col1 <- lapply(df$col1, function(x) grep("[0-9]+", x))
# 出力
# $col1
# [[1]]
# [1] 123
# [[2]]
# [1] 456
strsplit
strsplit
は、文字列を指定された区切り文字で分割する関数です。
# 文字列
str <- "abc123def456"
# strsplitで文字列を分割
strsplit(str, "")[[1]][grep("[0-9]", strsplit(str, "")[[1]])]
# 出力
[[1]]
[1] "1" "2" "3" "4" "5" "6"
forループ
for
ループを用いて、文字列を1文字ずつ処理し、数字のみを抽出することもできます。
# 文字列
str <- "abc123def456"
# 数字のみ抽出
num <- vector("numeric", length(str))
for (i in 1:length(str)) {
if (grepl("[0-9]", substr(str, i, i))) {
num[i] <- as.numeric(substr(str, i, i))
}
}
# 出力
[1] 1 2 3 4 5 6
# gsubで数字以外を空文字に置換
gsub("[^0-9]", "", str)
# 出力
[1] "123456"
r string dataframe