2014-12-04 5 views
2

이의 내가 같은 테이블이 있다고 가정 해 봅시다 :MATLAB 몇 가지 기준에 따라 테이블의 추출물 선택된 행

post user   date 
____ ____ ________________ 
1  A  12.01.2014 13:05 
2  B  15.01.2014 20:17 
3  A  16.01.2014 05:22 

내가 작은 테이블을 만들려는 모든 게시물을 포함하는 (원래 하나를하지만 삭제!) 예를 들어 사용자 A는 게시 된 날짜를 포함합니다.

MATLAB's documentation (행을 지우는 마지막 부분 참조)에서 MATLAB을 사용하면 몇 가지 기준에 따라 표의 마스크를 만들 수 있습니다. 그래서 내 경우에는 내가 같은 것을 할 경우 :

>> postsA = 
     1 
     0 
     1 

1 초 만족 에서 해당 행 myTable에가 분명히있는 곳은 다음과 같습니다

postsA = myTable.user == 'A' 

가 나는 좋은 마스크 벡터를 얻을 내가 준 규칙. 나는 위의 행에서 지적했던 documention에서

는 원래 테이블에서 삭제됩니다

postsNotA = myTable.user ~= 'A' % note that I have to reverse the criterion since I'm choosing stuff that will be removed 
myTable(postsNotA,:) = []; 

내가 그러나 것 - 위에서 언급 한 바와 같이 - 내 원래의 테이블을 만지지 것을 좋아합니다. 여기에 한 가지 가능한 솔루션은 두 개의 열이 빈 테이블을 만드는 것입니다 : 또한 내 마스크 벡터 postsA의 현재 값을 보는 동안, 내 원래 테이블의 모든 행을 통해

post date 
____ ____ 

interate하고 1 인 경우에 동일 관심있는 행의 두 열을 복사하고이 수축 된 행을 작은 테이블에 연결하십시오. 내가 알고 싶은 것은이 문제에 대해 1-2 라인의 긴 솔루션이 있다면?

+1

어떻게 테이블'에 대한 (t1.post (STRCMP (t1.user, 'A')), t1.date (STRCMP (t1.user, 'A'))) ', 여기서't1'은 원래 테이블입니까? – Divakar

+0

빈 테이블을 반환합니다. 내 데이터 세트가 거대하기 때문에 자신의 방식을 테스트하기 위해 원래의 게시물과 동일한 테이블을 다시 만들었습니다. 테스트 해 봤니? 그렇다면 비교할 수 있도록 코드를 게시하십시오. – rbaleksandar

+0

도움을 주셔서 감사합니다! – rbaleksandar

답변

4

가정하면 myTable은 원래 테이블입니다.

당신은 단지

myTable(myTable.user == 'A',:) 

샘플 코드를 수행 할 수 있습니다

user = ['A';'B';'A';'C';'B']; 
Age = [38;43;38;40;49]; 
Height = [71;69;64;67;64]; 
Weight = [176;163;131;133;119]; 
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80]; 
T = table(user,Age,Height,Weight,BloodPressure) 
T(T.user=='A',:) 

을 제공합니다 :

T =

user Age Height Weight   BloodPressure  
____ ___ ______ ______ _________________________ 

A  38  71  176  124     93 
B  43  69  163  109     77 
A  38  64  131  125     83 
C  40  67  133  117     75 
B  49  64  119  122     80 
,451,515,

ANS =

user Age Height Weight   BloodPressure  
____ ___ ______ ______ _________________________ 

A  38  71  176  124     93 
A  38  64  131  125     83 
+0

그러나 더 나은 (그리고 제 경우에는 작동하는) 솔루션이지만 "저장"하지 않으려는 "사용자"열을 포함하고 있습니다. 원래 게시물에서 언급했듯이 테이블이 저장 될 것입니다. 그 특정 사용자 (귀하의 경우 - 환자)를위한 구조에서 추출한 테이블의 모든 데이터는 어쨌든 그/그녀에 관한 것입니다. 리소스를 절약하기 위해이 작업을 수행하고 싶었습니다 (데이터 세트에 약 1 000 000 개의 항목이 있음). 난 당신이 테이블의 색인 생성의 열 매개 변수에서 범위를 사용할 수 있습니다.이 목적을 위해 열의 변수 이름을 사용할 수 있습니까? – rbaleksandar

+0

예를 들어, T (T.user == 'A', : 2)는 환자 A의 모든 Age-entries를 반환합니다. 하나는 숫자가있는 범위를 줄 수 있지만 내 경우에는 읽기 쉽고 처리 할 수 ​​있다고 생각합니다. 간단히 나열하면 어떤 열을 추출하고 싶은지 (@Divakar가 주석으로 게시 한 것과 유사) – rbaleksandar

+0

추가 정보를 추가하기 위해 답을 편집했습니다. – rbaleksandar

관련 문제