因为我正在使用一个非常复杂的表,在变量位置有令人讨厌的重复值,所以我想在特定的行和列之间进行字符串搜索。
例如:
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]
答案 0 :(得分: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
]
答案 1 :(得分:2)
Length[Cases[Position[table, "name1"], {1 | 2, 3}]] >= 1
输出 - >真
或者
Cases[Position[table, "name1"], {1 | 2, 3}]
输出 - > {{2,3}}
答案 2 :(得分: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}}
*)