프로그래밍 이외에도이 문제에 대한 올바른 접근 방식을 놓치고 있습니다. 시장 이름 열이있는 2 개의 데이터 프레임이 있습니다. 불행히도 이름은 각 열의 문자/기호에 따라 다릅니다 (예 : 알바니 .Schenectady.Troy = ALBANY, Boston.Manchester = BOSTON.열의 값을 문자열로 추출하고 데이터 프레임 열의 값을 바꿉니다
두 데이터 프레임 모두에서 시장 이름을 표준화하여 나중에 merge
작업을 수행 할 수 있습니다.
두 단계로 문제를 해결할 생각 : 1) 두 테이블에서 고유 한 시장 이름의 벡터를 만들고이를 사용하여 조회 테이블을 만듭니다. 다음과 같이 보이는 것 :
표 1 시장> "Albany.Schenectady.Troy", "Albuquerque.Santa.Fe", "Atlanta". . . .
표 2 시장> "SPOKANE", "BOSTON". . .
나는 marketnamesvector <- paste(unique(Table1$Market, sep = "", collapse = ","))
을 시도했지만 원하는 출력을 생성하지 못했습니다.
2) 표 2의 시장 이름을 표 1의 동등한 시장 이름으로 변경하십시오. 표 1에서 사용할 수없는 시장 이름에 대해서는 표 2에서 시장 이름에 동일한 값을 유지해야합니다.
나는 아래와 같이 루핑 기능을 사용할 수 있지만 필자는 여전히 룩업 테이블이 필요하다는 것을 알고있다.
replacefunc <- function (data, oldvalue, newvalue) { newdata <- data for (i in unique(oldvalue)) newdata[data == i] <- newvalue[oldvalue == i] newdata }
표 1 :이 테이블은 90 행 × 2 열이며, 90 개 고유의 시장 이름을 가지고있다.
Market Leads Investment Leads1 Leads2 Leads3
1 Albany.Schenectady.Troy NA NA NA NA NA
2 Albuquerque.Santa.Fe NA NA NA NA NA
3 Atlanta NA NA NA NA NA
4 Austin NA NA NA NA NA
5 Baltimore NA NA NA NA NA
표 2 :이 표는 150K 행 x 20 열이며 89 개의 고유 한 시장 이름이 있습니다.
Spot.ID Date Hour Time Local.Date Broadcast.Week Local.Hour Local.Time Market
2 13072765 6/30/14 0 12:40 AM 2014-06-29 1 21 9:40 PM SPOKANE
261 13072946 6/30/14 5 5:49 AM 2014-06-30 1 5 5:49 AM BOSTON
356 13081398 6/30/14 10 10:52 AM 2014-06-30 1 7 7:52 AM SPOKANE
389 13082306 6/30/14 11 11:25 AM 2014-06-30 1 8 8:25 AM SPOKANE
438 13082121 6/30/14 8 8:58 AM 2014-06-30 1 8 8:58 AM BOSTON
469 13081040 6/30/14 9 9:17 AM 2014-06-30 1 9 9:17 AM ALBANY
482 13080104 6/30/14 12 12:25 PM 2014-06-30 1 9 9:25 AM SPOKANE
501 13082120 6/30/14 9 9:36 AM 2014-06-30 1 9 9:36 AM BOSTON
617 13080490 6/30/14 13 1:23 PM 2014-06-30 1 10 10:23 AM SPOKANE
루프에서 [regexpr] (http://stackoverflow.com/questions/3539826/whats-the-r-equivalent-of-sqls-like-description-statement/3540002#3540002) 함수를 사용할 수 있습니다. 표 1의 각 시장 이름과 표 2의 모든 이름 사이의 유사성을 계산합니다.그런 다음 유사성 점수를 기반으로 표 1의 이름을 표 2의 가장 가까운 이름으로 바꿀 수 있습니다. 효율적이지는 않지만 코드 작성은 간단합니다. 이 문제에 정말로 효율성이 필요합니까? – Jealie
두 파일의 이름을 모두 공유 할 수 있습니까? 현재의 질문에서 알 수 있듯이''gsub ("\\ .. * $", "", x)'와 같이 Albany와 Albuquerque를 취하기를 원할 수도 있습니다. 모든 이름을 제공 할 수 있다면 더 많은 지원을받을 것으로 생각됩니다. – jazzurro
아이디어로, 기간에 표 1 시장 이름을 strsplit 한 다음 tolower()와 표 2의 시장 이름을 입력하십시오. 두 열에 대해 setdiff()를 호출하면 몇 가지 표 2의 이름을 바꿀 수 있습니다. 요인) 아주 쉽게. 이름을 동일하게 만들면 병합 할 수 있습니다. – lawyeR