LoginSignup
0
0

More than 1 year has passed since last update.

Excel セル式でRの%in%, Pythonのin(pandasのisin)のような処理をする

Last updated at Posted at 2022-09-27

まとめ

  • XMATCH
  • ISNA

を組合せて使うとよい。

前提

  • Office 365 の Excel

Filter などと併用しない場合は古いバージョンでもinのような処理自体はできる気はするが、未確認です。

お話

Excelでpower query, power pivot を使うと便利ですが、Filter, Sort, Unique のような dynamic array (?) を処理する関数群も使ってみると非常に便利です。

ある配列がほかの配列に含まれるかどうかを返すような処理が必要になり、調べてみるとCOUNTIFセル関数を使う例が出てきました。が、これはどうも「セル範囲」に対する参照を引数に取るものであって、「配列」は取れないため使えません。

さらに調べると、isnaとmatchを使った例が紹介されていました。要点は次の2点です。

  • match(もしくはxmatch) を使うことで、セル参照ではなく配列を引数に取れる
  • matchの結果でmatchしないものは#N/Aとなるので、isna関数でtrue, false の配列に変換する

不満

ちょっと脇にそれますが、愚痴です。

  • Letで使える変数名に数値が含められないことと、含めたときにエラーメッセージが表示されること
  • countifが配列に対して使えると明らかにシンプルになる場合があるので、何とかしてほしい...

例題&コード例

例題

共通のvalueを持つkeyが何件あるか。

Excel

image.png

=LET(
x, $A$1:$B$10,
xx, INDEX(x,,1),
xxx, INDEX(x,,2),
v, FILTER(xxx, xx=D6),
vv, NOT(ISNA(XMATCH(xxx, v,0,1))),
vvv, (ISNA(XMATCH(xx,D6,0,1))),
SUM(IF(vv=vvv,1,0))
)

R

d <- data.frame(key=c(1,1,1,2,2,3,3,3,3), value=c(10,20,30,20,40,10,20,50,60))
result <- sapply(unique(d$key), function(v) {vv <- d$value[d$key == v]; sum(d$value %in% vv) - length(vv)})

R最近書いてないのでこんな感じになりましたが、もっといいコード例を気軽にコメントしてくださいね!

Python

時間に余裕ができたら書きます...

参考

0
0
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
0
0