R(文字と文字列)

2026年2月 2日 (月)

[R]同じ文字列を繰り返した文字列を作成する

stirngrパッケージのstr_dup関数を使う。

> library(stringr)
> s <- "崩壊3rd"
> str_dup(s, 1:3)
[1] "崩壊3rd" "崩壊3rd崩壊3rd" "崩壊3rd崩壊3rd崩壊3rd"
> s <- c("ゼンレスゾーンゼロ", "崩壊3rd", "鳴潮")
> str_dup(s, 1:3)
[1] "ゼンレスゾーンゼロ" "崩壊3rd崩壊3rd" "鳴潮鳴潮鳴潮"

2025年12月31日 (水)

[R]文字列が数値に変換できるかどうか判定する

Rは、文字列が数値に変換できるかどうか判定する関数は、初期状態では実装されていない。そのため、次のような自作関数を使用する。

is_numeric <- function(s) {return(!is.na(suppressWarnings(as.numeric(s))))}

動作例は以下のとおり。数値に変換できない文字列はNAが返されるが、suppressWarnings関数により警告の表示が抑制されるため、そのままis.na関数で変換できたかどうか判定することができる。

> is_numeric(" ")
[1] FALSE
> is_numeric("1")
[1] TRUE
> is_numeric("2.0")
[1] TRUE
> is_numeric(" 3.0 ")
[1] TRUE
> is_numeric("4.e4")
[1] TRUE
> is_numeric("Senadia")
[1] FALSE
> is_numeric("セナディア")
[1] FALSE

2025年12月30日 (火)

[R]文字列の長さを得る

stringrパッケージのstr_length関数かstr_width関数を使う。str_length関数は文字数を返す。str_width関数は、文字列を等幅フォントで表示される際の幅(半角英数字が1)を返す。最後の例のとおり、サロゲートペアの文字(𩹉)も幅が2と判定されている。

> s <- c("崩壊3rd", "鈴木みのり", "セナディア", "補塡する")
> s <- c(s, paste0(rawToChar(as.raw(c(0xf0, 0xa9, 0xb9, 0x89))), "(飛魚)"))
> s
[1] "崩壊3rd" "鈴木みのり" "セナディア" "補塡する" "𩹉(飛魚)"
> library(stringr)
> str_length(s)
[1] 5 5 5 4 5
> str_width(s)
[1] 7 10 10 8 10

2025年12月26日 (金)

[R]空白を追加した指定の長さの文字列を得る

いわゆる空白埋めをした文字列を得る方法。stringrパッケージのstr_pad関数を使う。指定の文字列の長さより短い長さを指定すると文字列がそのまま返される。

> library(stringr)
> s <- "SENADIA"
> s
[1] "SENADIA"
> str_pad(s, 10)
[1] " SENADIA"
> str_pad(s, 5)
[1] "SENADIA"

デフォルトでは、文字列の長さは、等幅フォントで表示される際の幅(半角英数字が1)で処理する。これを文字数で処理する場合はuse_widthオプションにFALSEを指定する。

> s <- "崩壊3rd"
> str_pad(s, 7)
[1] "崩壊3rd"
> str_pad(s, 7, use_width = FALSE)
[1] " 崩壊3rd"
デフォルトでは文字列の先頭に空白(0x20)が追加される。sideオプションを使うと、先頭か末尾か先頭・末尾のいずれかを指定できる。padオプションに文字を指定するとその文字が追加される。
> s <- "セナディア"
> str_pad(s, 7, side = "left", use_width = FALSE)
[1] " セナディア"
> str_pad(s, 7, side = "right", use_width = FALSE)
[1] "セナディア "
> str_pad(s, 7, side = "both", use_width = FALSE)
[1] " セナディア "
> str_pad(s, 7, side = "both", pad = "*", use_width = FALSE)
[1] "*セナディア*"

2025年12月17日 (水)

[R]文字列型ベクトルの要素を連結して文字列を作る

stringrパッケージのstr_flatten関数を使う。要素を連結させるベクトルは一つしか与えることができない。デフォルトでは要素の間には何も挟まずに連結するが、第二引数かcollapseオプションに文字列を指定すると、要素の間にその文字列を挟んで連結する。戻り値は当然長さが1の文字列型ベクトル(A string, i.e. a character vector of length 1.)。

> library(stringr)
> s <- c("マクロスΔ","カナメ役", "安野希世乃さん", "かわいい")
> print(s)
[1] "マクロスΔ" "カナメ役" "安野希世乃さん" "かわいい"
> str_flatten(s)
[1] "マクロスΔカナメ役安野希世乃さんかわいい"
> str_flatten(s, ",")
[1] "マクロスΔ,カナメ役,安野希世乃さん,かわいい"
> str_flatten(s, collapse = ",")
[1] "マクロスΔ,カナメ役,安野希世乃さん,かわいい"

2025年12月15日 (月)

[R]文字列の末尾から文字数を指定して文字列を取り出す

stringrパッケージのstr_sub関数を使う。第二引数に文字数を負数にして指定すると、末尾から何文字という指定になる。

> library(stringr)
> s <- c("鈴木みのりさん、かわいい", "瀬戸麻沙美さん、かわいい")
> str_sub(s, -10) # 末尾から10文字目まで
[1] "みのりさん、かわいい" "麻沙美さん、かわいい"

2025年12月14日 (日)

[R]文字列の末尾から文字数を指定して文字列を取り出す

baseパッケージには、文字列の末尾から文字数を指定して文字列を取り出せる関数(VBAであればRight関数)は搭載されていない。この動作を実現させるには、nchar関数とsubstr関数を組み合わせて使う。

> s <- c("鈴木みのりさん、かわいい", "瀬戸麻沙美さん、かわいい")
> nchar(s)
[1] 12 12
> n <- 10 # 末尾から取り出す文字数を指定
> substr(s, nchar(s) - n + 1, nchar(s)) # 末尾から10文字目まで取り出す
[1] "みのりさん、かわいい" "麻沙美さん、かわいい"

stringrパッケージのstr_sub関数を使うと、少しだけ簡単に実現することができる。

2025年12月12日 (金)

[R]文字列の先頭から文字数を指定して文字列を取り出す

stringrパッケージのstr_sub関数を使う。第二引数を指定せず第三引数に正数を指定すると、先頭から何文字まで取り出すという指定になる。

> library(stringr)
> s <- c("鈴木みのりさん、かわいい", "瀬戸麻沙美さん、かわいい")
> str_sub(s, , 5) # 先頭から5文字目まで
[1] "鈴木みのり" "瀬戸麻沙美"
> str_sub(s, , 7) # 先頭から7文字目まで
[1] "鈴木みのりさん" "瀬戸麻沙美さん"

2025年12月11日 (木)

[R]文字列の先頭から文字数を指定して文字列を取り出す

baseパッケージには、文字列の先頭から文字数を指定して文字列を取り出せる関数(VBAであればLeft関数)は搭載されていない。この動作を実現させるには、substr関数を使う。

> s <- c("鈴木みのりさん、かわいい", "瀬戸麻沙美さん、かわいい")
> substr(s, 1, 5) # 先頭から5文字目まで
[1] "鈴木みのり" "瀬戸麻沙美"
> substr(s, 1, 7) # 先頭から7文字目まで
[1] "鈴木みのりさん" "瀬戸麻沙美さん"

stringrパッケージのstr_sub関数を使うと、少しだけ簡単に実現することができる。

2025年12月10日 (水)

[R]文字列の一部を取り出す

stringrパッケージのstr_sub関数を使う。第二引数に取り出したい文字列が始まる位置を、第三引数に終わる位置をそれぞれ先頭から何文字目か(1~)を指定する。それぞれ引数は省略することができ、省略した場合は以下のようになる。また負数を指定することもでき、その場合の動作は以下のようになる。

> library(stringr)
> s <- c("鈴木みのりさん、かわいい", "瀬戸麻沙美さん、かわいい")
> str_sub(s, 3, 5) # 3~5文字目
[1] "みのり" "麻沙美"
> str_sub(s, 3) # 3文字目以降すべて
[1] "みのりさん、かわいい" "麻沙美さん、かわいい"
> str_sub(s, , 5) # 先頭から5文字目まで
[1] "鈴木みのり" "瀬戸麻沙美"
> str_sub(s, -10) # 末尾から10文字目まで
[1] "みのりさん、かわいい" "麻沙美さん、かわいい"
> str_sub(s, , -8) # 末尾から8文字取り除く
[1] "鈴木みのり" "瀬戸麻沙美"

より以前の記事一覧

無料ブログはココログ

■■

■■■