2011-08-05 16 views
2

変数の場所で厄介な繰り返し値を持つ非常に複雑なテーブルを扱っているので、特定の行と列の間で文字列検索を行いたいと思います。例えば文字列の列と行を指定して検索する

table={{"header1", "header2", "header3", 
"header4"}, {"falsepositive", "falsepositive", "name1", 
"falsepositive"}, {"falsepositive", "falsepositive", "name2", 
"falsepositive"}, {"falsepositive", "falsepositive", 
"falsepositive", "falsepositive"}} 

%//TableForm= 
header1   header1   header1   header1 
falsepositive falsepositive name1   falsepositive 
falsepositive falsepositive name2   falsepositive 
falsepositive falsepositive falsepositive falsepositive 

どのように私は、行、列3に、例えば、文字列のために2つの貫通1を求めますか?

Whichを使用して、テーブル内の文字列の位置に基づいて値を割り当てたいとします。

例えば、おそらく

Which[string matched in location one, value, matched in location two, value2] 

答えて

5

あなたは与えられた文字列は、行列の特定のサブセクションであるか否かのテストをしたいです。 Part([[...]])とSpan(;;)を使用してこれらのサブセクションを選択することができ、範囲の範囲またはサブサンプルを指定することができます。このサブセクションでは、あなたのパターンはMemberQによって行うことができます含まれているかどうかをテストするには、次のように:このように

MemberQ[table[[1 ;; 2, 3]], "name2"] 

(* ==> False *) 

MemberQ[table[[1 ;; 2, 3]], "header3"] 

(* ==> True *) 

、あなたのWhichステートメントは次のようなものです

myVar = 
Which[ 
    MemberQ[table[[1 ;; 2, 3]], "name2"], 5, 
    MemberQ[table[[2 ;; 3, 4]], "falsepositive"], 6, 
    ... 
    True, 20 
    ] 
+0

私の答えのコメントを参照してください –

+0

ありがとう!ほんとうにありがとう! – Rose

1

、私はあなたを理解している場合:私はそれを理解したよう

f[table_, value_, rowmin_, rowmax_, colmin_, colmax_] := 
Select[Position[table, value], 
    rowmin <= [email protected]# <= rowmax && colmin <= [email protected]# <= colmax &] 
f[table, "name1", 1, 10, 1, 10] 
(* 
-> {{2, 3}} 
*) 
+0

これはうまくいくと思います。なぜなら、文字列が行/列の指定内にあるかどうかについてTrue/Falseの最終的な戻り値が必要になるだけですが、調整が必要です。本当にありがとう! – Rose

+0

@ローズ彼はあなたの要求をよりよく理解しているので、私はあなたが私の答えを受け入れるべきではなく、Sjoerdを受け入れるべきだと思う。 –

2
Length[Cases[Position[table, "name1"], {1 | 2, 3}]] >= 1 

出力 - >真

それとも

Cases[Position[table, "name1"], {1 | 2, 3}] 

出力 - > {{2,3}}

関連する問題