2013-07-12 3 views
1

가정하자 나는 두 개의 데이터 프레임이 있습니다독특하고 고유하지 않은 목록

데이터 프레임 (1) (의이 데이터 1을 부르 자) : 데이터 1에 대한

V1  V2  
1  "AB"  
3  "XY" 
5  "DH" 
8  "ST" 
7  "RE" 

코드 :

V1  V2  
1  "AB"  
2  "ZZ" 
3  "XY" 
5  "DH" 
8  "ST" 
:
V1 <- c(1,3,5,8,7) 
V2 <- c("AB","XY", "DH", "ST","RE") 
Data1 <- data.frame(V1,V2) 

데이터 프레임 2 (이 데이터 2를 불러올 수) 데이터 2에 대한 3,691,363,210

코드 : 당신이 발견하는 경우

V1 <- c(1,2,3,5,8) 
V2 <- c("AB","ZZ","XY","DH","ST") 
Data2 <- data.frame(V1,V2) 

는 (V2의 값이 "ZZ"입니다) 데이터 2의 두 번째 행은 데이터 1과 데이터 1 (V2의 값입니다 "RE")의 마지막 행에 존재하지 않습니다 Data2에는 없습니다.

A) 데이터 프레임 중 하나에도 존재하지 않는 V2 값의 목록을 만들고 싶습니다.
이 예제의 경우 "ZZ"및 "RE"가됩니다.

B) 두 데이터 프레임에있는 모든 V2 값 목록을 작성하고 싶습니다.
이 예제의 결과는 "AB", "XY", "DH", "ST"가됩니다.

답변

2

당신은 ?setdiff?intersect

inters <- intersect(DF2$V2, DF1$V2) 
[1] "AB" "XY" "DH" "ST" 

setdf <- c(setdiff(DF2$V2, DF1$V2), setdiff(DF1$V2, DF2$V2)) 
[1] "ZZ" "RE" 
를 찾고 있습니다
1

당신은 V2의 값이 모두 dataframes 존재 여부를 찾기 위해 %in% 표현을 사용할 수 있습니다. 식 (!)을 사용하여 두 데이터 프레임에 존재하지 않는 데이터를 찾은 다음 두 데이터를 모두 바인딩하십시오.

이 마지막 부분에
> rbind(Data1[!Data1$V2 %in% Data2$V2,], Data2[!Data2$V2 %in% Data1$V2,]) 
    V1 V2 
5 7 RE 
2 2 ZZ 
> unique(rbind(Data1[Data1$V2 %in% Data2$V2,], Data2[Data2$V2 %in% Data1$V2,])) 
    V1 V2 
1 1 AB 
2 3 XY 
3 5 DH 
4 8 ST 

: 모든 V1, V2 조합이 동일합니다, 당신은 단순히

Data1[Data1$V2 %in% Data2$V2,] 

를 작성하고 자신에게 몇 줄의 코드를 저장할 수 있습니다.

관련 문제