2017-12-12 12 views
1

내가 가진 두 개의 데이터 프레임 R - 누락 및 주문 행 중 2 개 데이터 프레임을 결합

merge_test_1 = t(data.frame("cats" = 1, "dogs" = 2, "horses" = 4)) 
merge_test_2 = t(data.frame("horses" = 1, "dogs" = 3, "rabbits" = 2)) 

그들은 다음과 같이 : 그들은 모두 행 이름이없는

 [,1] 
cats  1 
dogs  2 
horses 4 

     [,1] 
horses  1 
dogs  3 
rabbits 2 

참고하는 방법 공통적으로, 그리고 그들이 공유하는 것들도 다른 순서로 존재합니다.

 [,1] [,2] 
cats  1  0 
dogs  2  3 
horses 4  1 
rabbits 0  2 

최종 데이터 프레임의 순서는 문제가 너무 많이, 너무 오래 그들은 제대로 결합하지 않는 : 나는 결과로이 같은 것을 얻을 수 있도록 내가 함께 그들을 결합하고 싶습니다. 내가 "병합"명령을 사용하여 시도했지만 난 그것을 알아낼 수 없었다.

+0

시도는 dataframe의 변수로 행 이름을 저장합니다. – AntoniosK

+0

정확히 무엇을 의미합니까? – dain

+0

원하는 출력을 얻으려면 하나 이상의 변수에 조인해야합니다. 여기서 값과 별도의 변수는 없습니다. 따라서 행 이름을 사용하여 이름을 만들어야합니다. 'merge' 명령은 병합 할 때'by = '옵션이 필요합니다 ... – AntoniosK

답변

3

나는 변수에 rownames 이동에 대한 사전 의견에 동의하지만, 이렇게 만 기본 R 기능을 사용하지 않으려면, 다음 코드 (작동합니다 일치하지 않는 셀은 0 대신 NA이됩니다.

merge_test_1 = t(data.frame(cats = 1, dogs = 2, horses = 4)) 
merge_test_2 = t(data.frame(horses = 1, dogs = 3, rabbits = 2)) 
merge(merge_test_1, merge_test_2, by = 0, all = TRUE) 
#> Row.names V1.x V1.y 
#> 1  cats 1 NA 
#> 2  dogs 2 3 
#> 3 horses 4 1 
#> 4 rabbits NA 2 
3


library(dplyr) 
merge_test_1 = t(data.frame(cats = 1, dogs = 2, horses = 4)) %>% as.data.frame() 
merge_test_2 = t(data.frame(horses = 1, dogs = 3, rabbits = 2)) %>% as.data.frame() 

# change row names into actual column 
merge_test_1 <- tibble::rownames_to_column(merge_test_1) 
merge_test_2 <- tibble::rownames_to_column(merge_test_2) 

df <- full_join(merge_test_1, merge_test_2, by = "rowname") 

# change NAs to 0 
df[is.na(df)] <- 0 

df 
#> rowname V1.x V1.y 
#> 1 cats 1 0 
#> 2 dogs 2 3 
#> 3 horses 4 1 
#> 4 rabbits 0 2