2011-08-05 3 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 

어떻게 행, 열 세, 예를 들어, 문자열을이를 통해 하나를 보이나요?

Which을 사용하여 테이블의 문자열 위치를 기반으로 값을 지정하고 싶습니다.

예를 들면, 아마도

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

답변

5

당신은 주어진 문자열이 행렬의 특정 하위 섹션에 있는지 여부를 테스트합니다. Part ([[...]]) 및 Span (;;)을 사용하여이 하위 섹션을 선택할 수 있으며 범위와 범위의 하위 샘플을 지정할 수 있습니다. 이런 식으로

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

(* ==> False *) 

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

(* ==> True *) 

, 당신의 Which 문은 다음과 같을 수 있습니다 :이 조항은 사용자의 패턴과 같이 MemberQ하여 수행 할 수 있습니다 포함되어 있는지 여부를 테스트

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