2014-07-26 5 views
0

각 열에 문자 유형이있는 두 개의 열이있는 표가 있습니다. 그것은이다 :표의 문자 패턴 색인 얻기

"FTGS" "JKLP" 
"CVVA" "CVVA" 
"HGFF" "CVVD" 
"CVVD" "HGFF" 
"OPSF" "WQSR" 

...

누군가가 내가 컬럼 1과 2에서 문자의 특정 조합의 인덱스 (행 번호)를 뱉어 기능을 작성하는 방법을 말해 줄래? 함수 (HGFF, CVVD)를 입력하면 3과 4가 반환됩니다 (HGFF 또는 CVVD가 column1 또는 2에 있는지 여부는 중요하지 않음). 입력하면 (CVVA, CVVA) 2가됩니다. 문제는 두 열을 검사해야한다는 것입니다. R에 해결책이 있습니까? 그렇지 않으면 bash도 괜찮을 것이다.

+0

난 당신이'오른쪽 2를 반환 (CVVA, CVVA)가'0 '(CVVA, CVVD)을 반환'라고하는 의미 생각 작동하는 것 같다? – A5C1D2H2I1M1N2O1R2T1

+0

거기에 오타가 있습니다. – user3419669

답변

0

다음과 같은 기능은 당신을 위해 작동합니다 :

myFun <- function(v1, v2, indf) { 
    x <- sort(c(v1, v2)) 
    which(apply(indf, 1, function(z) all(sort(z) == x))) 
} 

사용법은 다음과 같이 될 것이다 (되는 data.frame 소위 "mydf"에서 데이터를 가정) : R에서

myFun("CVVA", "CVVD", indf = mydf) 
myFun("HGFF", "CVVD", indf = mydf) 

, 당신이 찾고있는 것처럼 들리는 기능은 which이지만, 당신이 직접 찾고있는 것을하지는 않을 것입니다.

+0

내 테이블의 클래스가 매트릭스입니다. 그게 효과를 낼 것입니까? – user3419669

+0

@ user3419669, 시도해 보셨습니까? 차이를 만들어서는 안됩니다. – A5C1D2H2I1M1N2O1R2T1

0

이것은 또한

fun1 <- function(v1, v2, mat) { 
ind <- c(0, -nrow(mat)) 
indx1 <- which(mat == v1) + ind 
indx2 <- which(mat == v2) + ind 
if (all(sort(indx1) == sort(indx2))) { 
    indx1 
} else NULL 
} 

fun1("HGFF","CVVD", mat) #mat is the matrix 
#[1] 3 4 

fun1("CVVA","CVVD", mat) 
#NULL