2016-10-19 7 views
0

두 데이터 프레임 SCR 및 matchedSCR이 있습니다. 그들은 각각 단백질 표제에 대한 목록을 포함하고 있습니다. matchedSCR은 SCR에서 직접 생성 된 SCR의 하위 집합입니다. matchingSCR 단백질 표제의 문자열은 SCR의 해당 표제와 동일해야하며이를 연결하는 색인으로 사용할 수 있어야합니다. 그러나 레코드를 일치 시키려고 할 때 사용하는 방법에 관계없이 일치하는 부분은 적습니다. 다음은 모두 17000 레코드 여야하는 약 6000 일치합니다.두 개의 목록에서 문자열을 일치시키는 데 예기치 않은 오류가 발생했습니다.

subset(SCR, (SCR$MESH_HEADING %in% matchedSCR$Heading)) 
SCR[SCR$MESH_HEADING %in% matchedSCR$Heading, ] 
sqldf("select * from SCR join matchedSCR on SCR.MESH_HEADING=matchedSCR.Heading") 

실망스러운 것은 내가 누락 된 행을 찾아 손으로 찾을 수 있다는 것입니다! SCR 거의 정확하게 같은 방법으로 만들어 다른 부분 집합 dataframe, orthologSCR에 SCR 일치

if(SCR$MESH_HEADING[64] == matchedSCR$Heading[2]) {print("T")} 
[1] "T" 

는 완벽하게 작동, 그래서 문제가 어떻게 든 matchedSCR와 가정,하지만 난 이유를 알아낼 수 없습니다. 다음과 같은 단일 문자 열 (요인이 아님)입니다.

VisA protein, Streptomyces virginiae 
VisB protein, Streptomyces virginiae 
VisC protein, Streptomyces virginiae 
VisD protein, Streptomyces virginiae 
subpeptin JM-A, Bacillus subtilis 
subpeptin JM-B, Bacillus subtilis 
BT peptide antibiotic, Brevibacillus texasporus 
LI-Fb peptide, Paenibacillus polymyxa 

누구나 이러한 문자 비교가 실패 할 수있는 이유를 제안 할 수 있습니까? 특수 문자가 여기에 어떤 이유 때문에 물건을 올릴까요? (그들은 작동중인 다른 하위 집합 데이터 프레임과 일치 할 때 중요하지 않습니다.) 정말 필요한 것은 SCR의 타의 추종을 불허하는 데이터입니다. 필자는 matchedSCR을 생성 한 복잡한 선택의 반대를 기반으로 엄청나게 느린 프로세스로 이것을 생성 할 수 있습니다. 그러나 여기에서 오류가 발생했기 때문에이 오류를 다시 배우고 싶습니다. 그래서이 문제가 다시 발생하지 않습니다.

답변

0

전이나 후에 약간의 흰색 문자를 낳게 될 수도 있습니다 ... 당신이 시도 할 수 있습니다 : How to trim leading and trailing whitespace in R?

은 또한 당신이 더 낮은 경우에 모든 변환 시도 할 수 있습니다. tm 라이브러리를 사용하면됩니다.

은 아마 무슨 일이 일어나고 확인하기 위해 경우에 할 수있는 가장 좋은 방법은 다음과 같습니다

library(dplyr) SCR$Heading <- SCR$MESH_HEADING full_join(SCR,matchedSCR, by=Heading) %>% View

그 DF를 조사하고 만들어 어떤했다하지 ... 그 거하고 일치하는 참조 문제를 이해하는 데 도움이됩니다. 일치하지 않는 레코드 만 보려면 anti_join을 시도 할 수도 있습니다.

드문 경우가 있습니다. https://cran.r-project.org/web/packages/fuzzyjoin/fuzzyjoin.pdf

+0

고맙습니다! 나는 너의 제안을 시도 할 것이다. : – NotMyJob

+0

@ NotMyJob, 주어진 해결책을 시도하는 것이이 커뮤니티에서 관습입니다. 작동하는 경우, "대답"으로 표시하고, 감사의 말을 전하려한다면, 내 대답을 포기할 것입니다. 작동하지 않는 경우 이유를 지정하는 설명을 작성하십시오. 기억하십시오, 이것은 다른 사람들에게 유용 할 것입니다! –