No.22892 【R】文字列ベクトルの突き合わせ  【明石】 2020/04/14(Tue) 12:14

青木先生 様;

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

文字列ベクトルの突き合わせについて,ご教示をいただけましたら,大変に助かります。

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

以下の3本の文字列ベクトルがあります。
v <- c("リンゴ", "ミカン", "バナナ", "スイカ", "メロン", "モモ")
s1 <- c("バナナ","モモ")
s2 <- c("リンゴ","メロン")
s1,s2を,vと突き合わせをして,以下の行列を作成したいと思います。

【出来上がり】
    リンゴ ミカン バナナ スイカ メロン モモ
s1 0 0 1 0 0 1
s2 1 0 0 0 1 0

> charmatch(v, s1)
[1] NA NA 1 NA NA 2

> charmatch(v, s2)
[1] 1 NA NA NA 2 NA
この結果を,ifelse()関数で,0/1に置換したいと思い,色々とやっていますが,うまくいきません。

ご教示をいただけましたら助かります。
お手数をおかけいたします。
//

No.22893 Re: 【R】文字列ベクトルの突き合わせ  【青木繁伸】 2020/04/14(Tue) 14:21

v <- c("リンゴ", "ミカン", "バナナ", "スイカ", "メロン", "モモ")
s1 <- c("バナナ","モモ")
s2 <- c("リンゴ","メロン")
#
a1 <- charmatch(v, s1) # NA NA 1 NA NA 2
ifelse(is.na(a1), 0, 1) # 0 0 1 0 0 1
# または
1 - is.na(a1) # 0 0 1 0 0 1
#
a2 <- charmatch(v, s2) # 1 NA NA NA 2 NA
ifelse(is.na(a2), 0, 1) # 1 0 0 0 1 0
# または
1 - is.na(a2) # 1 0 0 0 1 0
# 以上を踏まえ
x <- 1 - rbind(is.na(a1), is.na(a2))
rownames(x) <- c("s1", "s2")
colnames(x) <- v
x
# リンゴ ミカン バナナ スイカ メロン モモ
# s1 0 0 1 0 0 1
# s2 1 0 0 0 1 0
または %in% を使って
y = rbind(v %in% s1, v %in% s2) + 0
rownames(y) <- c("s1", "s2")
colnames(y) <- v
y

No.22894 御礼(Re: 【R】文字列ベクトルの突き合わせ)  【明石】 2020/04/14(Tue) 15:11

青木先生 様;

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

今回も,大変に良い勉強をさせていただきました。
心から,心より,御礼を申し上げます。
ありがとうございました。
//

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