두 데이터 세트를 함께 결합하려고합니다. x와 y라고 부르세요. 나는 y의 ID 변수가 x의 ID 변수의 부분 집합이라고 믿는다. 하지만 x가 y보다 많은 ID를 포함하고 있지만 매핑을 알지 못하기 때문에 순수한 의미는 아닙니다. 즉, x 및 y의 ID 중 일부 (전부는 아님)가 1 : 1과 일치 할 수 있습니다.R에서 복잡한 병합이있어 일치하지 않는 관측에 플래그를 지정 하시겠습니까?
나의 궁극적 인 목표는이 1 : 1 매핑이 실패한 곳을 파악하고 이러한 관찰에 플래그를 지정하는 것입니다. 나는 병합이 갈 길을 알았지 만 아닐 수도 있다고 생각했다. 예를 들면 다음과 같습니다.
id <- c(1:10, 1:100)
X1 <- rnorm(110, mean = 0, sd = 1)
year <- c("2004","2005","2006","2001","2002")
year <- rep(year, 22)
month = c("Jul","Aug","Sep","Oct","Nov","Dec","Jan","Feb","Mar","Apr")
month <- rep(month, 11)
#dataset X
x <- cbind(id, X1, month, year)
#dataset Y
id2 <- c(1:10, 200)
Y1 <- rnorm(11, mean = 0 , sd = 1)
y <- cbind(id2,Y1)
#merge on the IDs; but we get an error because when id2 == 200 in y we don't
#have a match in x
result <- merge(x, y, by.x="id", by.y = "id2", all =TRUE)
id 데이터가 = 200인데도 x 데이터 세트에서 일치하지 않으므로 병합 오류가 발생합니다. 불행히도, 나는 신분증과 모든 정보도 잃어 버렸습니다! (행 111에서 200과 같아야 함) :
tail(result)
id X1 month year Y1
106 95 -0.0748386054887876 Nov 2002 NA
107 96 0.196765325477989 Dec 2004 NA
108 97 0.527922135906927 Jan 2005 NA
109 98 0.197927230533413 Feb 2006 NA
110 99 -0.00720474886698309 Mar 2001 NA
111 <NA> <NA> <NA> <NA> -0.9664941
더 많은 것은 병합 된 파일의 ID 변수에 대한 중복 된 관찰을 얻습니다. id2 == 1 관측은 한 번만 존재했지만 두 번 복사했습니다 (예 : Y1은 1.55를 두 번 사용함).
head(result)
id X1 month year Y1
1 1 -0.67371266313441 Jul 2004 1.553220
2 1 -0.318666983469993 Jul 2004 1.553220
3 10 -0.608192898092431 Apr 2002 1.234325
4 10 -0.72299929212347 Apr 2002 1.234325
5 100 -0.842111221826554 Apr 2002 NA
6 11 -0.16316681842082 Jul 2004 NA
이 병합으로 인해 의도 한 것보다 복잡한 것이 있습니다. 나는 x에있는 모든 관찰을 검사하고 id가 y에서 id2와 일치하는 곳을 찾아 내고 그렇지 않은 것을 찾아 낼 수 있기를 바랬다. 그래서 나는 새 벡터를 얻을 것이고, flag라고 부르면, x $ id가 y $ id2에 일치하면 1을 취하고 그렇지 않으면 0을 취합니다. 이렇게하면 1 : 1 매핑이 실패한 곳을 알 수있었습니다. 잠재적으로 NAs를 다시 코딩하여이 문제에 대한 견인력을 얻을 수 있지만 id2 == 200 일 때 발생하는 오류는 무엇입니까? 그냥 정보를 버립니다.
내가 행운과 행으로 추가 시도 나는 아마도 그것은 루프를 짜는 것이 좋습니다뿐만 아니라 병합을 포기 또는 이러한 라인을 따라 뭔가 할 작동합니다 것 같습니다 : X의 모든 관찰
을 (ID2)에 대응
ID = ID2 개월 년
플래그 = 1 위의 길이 등 == 1, 그렇지 않으면 0
이면바라건대이 모든 것이 의미가 있습니다. 나는 어떤 도움이나지도에 대해 매우 감사 할 것입니다. 당신이 x$id
에서 일을 y$id2
에있는 찾고 있다면
'cbind'는 데이터 프레임이 아닌 행렬을 생성합니다. 'x'와'y'를 만들기위한 호출은'x
'x $ id == 1' 인'x'에 두 개의 행이 있으므로'y $ id2 == 1'에 대한 두 가지 관찰 결과가 나옵니다. 병합에 조인 기준과 일치하는 여러 관측치가있는 경우 가능한 조합마다 행을 만듭니다. 이것은 의도적으로 설계된 것으로 매우 유용합니다. –