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

如何查找字符串,例如在第三列第一到第二行?

我想Which根据字符串在表中的位置来分配值。

例如,

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

3 回答 3

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
  ]
于 2011-08-05T22:29:16.657 回答
2
Length[Cases[Position[table, "name1"], {1 | 2, 3}]] >= 1

输出 -> 真

或者

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

输出 -> {{2, 3}}

于 2011-08-06T16:25:41.510 回答
1

也许,如果我理解你:

f[table_, value_, rowmin_, rowmax_, colmin_, colmax_] := 
 Select[Position[table, value], 
  rowmin <= First@# <= rowmax && colmin <= Last@# <= colmax &]
f[table, "name1", 1, 10, 1, 10]
(*
-> {{2, 3}}
*)
于 2011-08-05T18:48:01.333 回答