No.22903 【R】 apply系関数を使った、文字列の連結  【明石】 2020/04/29(Wed) 11:07

青木先生 様;

お忙しいところを失礼いたします,明石と申します。
毎々,ご丁寧なご教示をいただき,誠にありがとうございます。
改めて御礼を申し上げます。
ありがとうございます。

標題について,ご教示をいただけましたら,大変に助かります。
毎々,お手数をおかけいたします。
何卒,どうぞよろしくお願いいたします。

----------------------------------------

2本のベクトル x y があります。
x <- c("りんご", "みかん", "桃", "バナナ", "西瓜")
y <- c(0, 2, 0, 2, 1)
要素の個数は同じです。

ベクトル要素の番号どうしに,対応関係があります。

x の各文字列を,y の数値だけ繰り返して,連結した文字列を作成したいと思います。

イメージ的には,以下のようになります。
"りんご"*0, "みかん"*2, "桃"*0, "バナナ"*2, "西瓜"*1
結果として,以下の文字列ベクトルを得たいと思います。
"みかん" "みかん" "バナナ" "バナナ" "西瓜"
以下,コードを作成しました。
s <- NULL
for (i in seq_along(x)) {
v <- rep(x[i], y[i])
s <- c(s, v)
}
これを,apply系関数で書き直すとすれば,どのようになるのか,
ご教示をいただけましたら,大変に助かります。

毎々,お手数をおかけいたします。
何卒どうぞ,よろしくお願いします。
//

No.22904 Re: 【R】 apply系関数を使った、文字列の連結  【青木繁伸】 2020/04/29(Wed) 21:14

複数の引数を取れる mapply を使うと良いと思います。
unlist と unname を使う必要があります。
unname(unlist(mapply(function(a, b) rep(a, b), x, y)))

No.22905 御礼(Re: 【R】 apply系関数を使った、文字列の連結)  【明石】 2020/04/30(Thu) 10:21

青木先生 様;

お忙しいところを失礼いたします,明石と申します。
毎々,ご丁寧なご教示をいただき,誠にありがとうございます。

今回も,新しい知識を教えてくださり,誠にありがとうございました。

mapply()関数の名前は聞いたことがありますが, 
自分が悩んでいた問題で,mapply()関数の使い方をご教示いただけましたので,
よく理解できました。

ありがとうございました。
ありがとうございました。
//

● 「統計学関連なんでもあり」の過去ログ--- 048 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る