2013-08-25 1 views
3

두 개의 문자 객체가 있습니다. 공통된 문자 수를 확인한 다음 인쇄해야합니다. 얼마나 많은 공통점이 있는지는 아무런 문제가 없지만 인쇄 할 코드를 파악할 수는 없습니다.두 개의 문자 객체로 공통된 객체를 인쇄하십시오.

LETTERS 
list <- c("A", "H", "J", "K") 
length(na.exclude(pmatch(LETTERS[1:20],list[1:3]))) 
print(pmatch(LETTERS[1:20],list[1:3])) 

이 인쇄 :

LETTERS 
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" 
[20] "T" "U" "V" "W" "X" "Y" "Z" 
    list <- c("A", "H", "J", "K") 
    length(na.exclude(pmatch(LETTERS[1:20],list[1:3]))) 
[1] 3 
    print(pmatch(LETTERS[1:20],list[1:3])) 
[1] 1 NA NA NA NA NA NA 2 NA 3 NA NA NA NA NA NA NA NA NA NA 

그래서 나는 공통점이 3 있다는 것을 알고 나는 자신의 위치를 ​​알고 있지만 어떻게이 "A" "H"를 "인쇄해야합니까 다음은 간단한 exemple이다 J "?

답변

2

귀하의 예를 들어 %in%

> LETTERS[LETTERS %in% list] 
[1] "A" "H" "J" "K" 

를 사용해보십시오 :

myletters<-LETTERS[1:20] 
> myletters[myletters %in% list[1:3]] 
[1] "A" "H" "J" 

대안 : 한 세트 만 최종 결과를 원하는 경우

pmatch(list[1:3],myletters) # gives the indices 
[1] 1 8 10 

myletters[pmatch(list[1:3],myletters)] # get the letters 
[1] "A" "H" "J" 
+2

이것은 훨씬 더 나은 접근법입니다. (@metrics) 그러나 당신의 것과 함께'list [naomom (pmatch (LETTERS [1:20], list [1 : 3]))]]'을 사용하면 효과가있었습니다. R베이스 객체이므로 목록에 쓰지 마십시오. '? list'를보십시오. –

0

에 의해 제안 pmatch를 사용하여 (중복 제거)하려면 다음을 사용하십시오 :

이 부분 일치를 사용하려면 6,
intersect(LETTERS, c("A", "H", "J")) 

, 당신은 pmatch두 번째에서 동일한 하나와 일치하는 첫 번째 입력에 하나 개 이상의 요소를 허용하지 않는 것을 관찰해야합니다. 차이주의 사항 : LETTERS, 말의 요소 (부분적으로) 일치 mylist의 요소를 인쇄 할 경우 순서와 중복을 유지, 지금

mylist <- c("B","A","B","2") 

> pmatch(mylist, LETTERS) 
[1] 2 1 NA NA 

> Vectorize(pmatch, "x")(mylist, LETTERS) 
B A B 2 
2 1 2 NA 

을, 당신은이를 사용할 수 있습니다

> mylist[!is.na(Vectorize(pmatch, "x")(mylist, LETTERS))] 
[1] "B" "A" "B" 
관련 문제