2017-12-29 43 views
1

I 다음 dataframes를 사용 FULL_JOIN dplyr는 :R - 열 위치

a <- c(1,1,1) 
b<- c(10,8,2) 
c<- c(2,2) 
d<- c(3,5) 

AB<- data.frame(a,b) 
CD<- data.frame(c,d) 

I는 CD의 첫 번째 열이 AB의 두 번째 열에 같다 AB와 CD에 가입하고자. 제 실제 데이터에는 다양한 이름의 열이 포함될 것이므로 위치 기반으로 참여하는 방법을 찾고 있습니다. 나는이 시도되었습니다

#Get the name of the last column in AB 
> colnames(AB)[ncol(AB)] 
[1] "b" 
#Get the name of the first column in CD 
> colnames(CD)[1] 
[1] "c" 

가 그럼 난 이렇게 가입을 시도 :

> abcd<- full_join(AB, CD, by = c("b" = "c")) 
> abcd 
    a b d 
1 1 10 NA 
2 1 8 NA 
3 1 2 3 
4 1 2 5 

답변

4

우리는 setNames

full_join(AB, CD, setNames(colnames(CD)[1], colnames(AB)[ncol(AB)])) 
# a b d 
#1 1 10 NA 
#2 1 8 NA 
#3 1 2 3 
#4 1 2 5 
+1

이 훌륭 할 수있다! 'setNames ("c", "b")'는'c '('b "="c ")'와 동일하다. – www

+1

이것은 나의 날을 만들었다. –

1

우리는 목표를 대체 할 수

> abcd <- full_join(AB, CD, by = c(colnames(AB)[ncol(AB)]=colnames(CD)[1])) 
Error: unexpected '=' in "abcd <- full_join(AB, CD, by = c(colnames(AB)[ncol(AB)]=" 

내가 찾고 있어요 동작은 기본적으로 이것이다 열 이름을 "Target"과 같은 공통 이름으로 변경 한 다음 full_join을 입력하십시오. 마지막으로 "대상"이름을 원래 열 이름으로 대체하십시오.

library(dplyr) 

AB_name <- names(AB) 
target_name <- AB_name[ncol(AB)] # Store the original column name 

AB_name[ncol(AB)] <- "Target" # Set a common name 
names(AB) <- AB_name 

CD_name <- names(CD) 
CD_name[1] <- "Target" # Set a common name 
names(CD) <- CD_name 

abcd <- full_join(AB, CD, by = "Target") %>% # Merge based on the common name 
    rename(!!target_name := Target) # Replace the common name with the original name 
abcd 
# a b d 
# 1 1 10 NA 
# 2 1 8 NA 
# 3 1 2 3 
# 4 1 2 5