3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

stringr::str_replace_allについてのメモ

Last updated at Posted at 2018-02-02

ちょっとちゃんとした文章にする余裕がなかったのでメモだけ。詳しくは?stringr::str_replace_allのExampleを参照してください。

library(tidyverse)

# サンプルデータ
xlist <- c(100, 500, 1000, 2000, 5000)
n <- 20
df <- data.frame(
  id = 1:n,
  x = sample(xlist, n, replace = TRUE)
)

# 変換(というか生成したい)ラベルベクトル作成
xlabel <- paste("x", 1:length(xlist), sep = "_")

# 今回の場合,名前付きベクトルでは無理なのでstr_replace_allのpatternを合成して適用
# 正規表現のマッチングパターンベクトル作成
pattern <- str_c("^", xlist, "$", collapse = "|")

# xの値から対応するxのラベルをmutateする
df2 <- df %>% 
  mutate(label = str_replace_all(x, pattern, xlabel))
head(df2, 8)
#>    id    x label
#>  1  1 5000   x_1
#>  2  2 2000   x_2
#>  3  3 5000   x_3
#>  4  4 2000   x_4
#>  5  5  500   x_5
#>  6  6 2000   x_1
#>  7  7  500   x_2
#>  8  8 5000   x_3

# 名前付きベクトルはこういう時に
# nameは商品A:Eとする
xname <- paste0("商品", LETTERS[1:5])
names(xname) <- xlabel

# labelの文字列からxnameという名前付きベクトルを利用してnameという変数を生成
# 名前付きベクトルでの置換は,patternがnames,replacementがベクトルの値とする
df3 <- df2 %>% 
  mutate(name = str_replace_all(label, xname))
head(df3, 8)
#>    id    x label  name
#>  1  1 5000   x_1 商品A
#>  2  2 2000   x_2 商品B
#>  3  3 5000   x_3 商品C
#>  4  4 2000   x_4 商品D
#>  5  5  500   x_5 商品E
#>  6  6 2000   x_1 商品A
#>  7  7  500   x_2 商品B
#>  8  8 5000   x_3 商品C
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?