No.22144 R ベクトル要素の完全一致検索  【明石】 2016/09/19(Mon) 15:17

青木先生,
いつもお世話になり,ありがとうございます,明石と申します。

Rプログラムについて,ご教示いただきたいことが出てきました。

初歩的な質問で大変に恐縮ですが,何卒どうぞ,よろしくお願いいたします。

−−−

Rに組み込みの文字列ベクトル state.name(アメリカ50州の名前)があります。
state.name

"Alabama" "Alaska" "Arizona" "Arkansas" "California" "Colorado" "Connecticut" "Delaware" "Florida" "Georgia" "Hawaii" "Idaho" "Illinois" "Indiana" "Iowa" "Kansas" "Kentucky" "Louisiana" "Maine" "Maryland" "Massachusetts" "Michigan" "Minnesota" "Mississippi" "Missouri" "Montana" "Nebraska" "Nevada" "New Hampshire" "New Jersey" "New Mexico" "New York" "North Carolina" "North Dakota" "Ohio" "Oklahoma" "Oregon" "Pennsylvania" "Rhode Island" "South Carolina" "South Dakota" "Tennessee" "Texas" "Utah" "Vermont" "Virginia" "Washington" "West Virginia" "Wisconsin" "Wyoming"
state.name の50要素から,
文字列の長さが最大,最小となる要素(州の名前)を
州の名前,要素の番号を対にして,すべて取り出すことを考えます。
nagasa <- nchar(state.name)
文字列の長さが最大となる要素(州の名前)は,複数あり,
> state.name[ nagasa == max(nagasa) ]
[1] "North Carolina" "South Carolina"
文字列の長さが最小となる要素(州の名前)は,複数あり,
> state.name[ nagasa == min(nagasa) ]
[1] "Iowa" "Ohio" "Utah"
のように,州の名前はすべて取り出すことはできますが,
その要素の番号までは,とりだすことができません。

初歩的な質問で大変に恐縮ですが,何卒どうぞ,よろしくお願いいたします。

No.22145 Re: R ベクトル要素の完全一致検索  【青木繁伸】 2016/09/19(Mon) 22:50

which を使えば良いでしょう
> which(nagasa==max(nagasa))
[1] 33 40
> state.name[which(nagasa==max(nagasa))]
[1] "North Carolina" "South Carolina"
> which(nagasa==min(nagasa))
[1] 15 35 44
> state.name[which(nagasa==min(nagasa))]
[1] "Iowa" "Ohio" "Utah"
> which(nagasa==12) # 任意の長さの州名を取り出す
[1] 34 38 39 41
> state.name[which(nagasa==12)]
[1] "North Dakota" "Pennsylvania" "Rhode Island" "South Dakota"
蛇足ではあるが,which.max, which.min では仕様にあわないが,それはそれで使い道がある
> which.max(nagasa)
[1] 33
> state.name[which.max(nagasa)]
[1] "North Carolina"
> which.min(nagasa)
[1] 15
> state.name[which.min(nagasa)]
[1] "Iowa"

No.22146 【御礼】 Re: R ベクトル要素の完全一致検索  【明石】 2016/09/20(Tue) 08:32

青木先生,
いつもお世話になり,ありがとうございます,明石と申します。

which.max()関数,which.min()関数を使うことを考えましたが,
最初に検出した1つに要素のみを返すことから,
重複の場合も考慮した,which.max()関数,which.min()関数のような関数を
探しましたが,見つけることができませんでした。

青木先生からご教示いただきました内容で,
which.max()関数,which.min()関数の活用の幅が広がりました。

よく分かりました。

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

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