2017-01-23 7 views
0

아말감을 두 줄로 합쳐서 출력이 양방에 가장 적합하도록 노력하고 있습니다. ddply 또는 aggregate을 사용하는 일부 솔루션을 읽었지만 숫자 데이터로만 작동합니다.여러 데이터 클래스가있는 행을 병합

다음은 내가하려는 일의 예입니다.

입력 : 키가 CNTRY

이상적이다

x <- c("Yemen", 1, NA, NA, 4, 5, "Six") 
y <- c("Yemen", NA, "B", 3, NA, 6, "Six") 

DF <- as.data.frame(rbind(x,y)) 
colnames(DF)[1] <- c("CNTRY") 

출력

"Yemen", 1, "B", 3, 4, 5, "Six" 

, 내가 x 또는 y의 값을 유지할지 여부를 선택 할 수 있어야한다 그들이 다르다면 임대.


편집 1

용액이 예에서는 데이터 프레임 DF 작동하지 x & y한다. 내 데이터 프레임에 복제 된 여러 계정이 있고 두 개 이상의 인스턴스가 있지만 계정 (키)을 공유하는 모든 행을 병합하려고합니다.

답변

0

에서 coalesce 기능을 사용할 수 있습니다 :

# dummy data with 2 countries to group on 
x <- c("Yemen", 1, NA, NA, 4, 5, "Six") 
y <- c("Yemen", NA, "B", 3, NA, 6, "Six") 
xx <- c("XXX", 3, NA, 33, 4, 7, "Four") 
yy <- c("XXX", 2, "B", NA, NA, NA, NA) 
DF <- as.data.frame(rbind(x,y,xx,yy)) 
colnames(DF)[1] <- c("CNTRY") 

# using tidyr fill function up and down 
library(dplyr) 
library(tidyr) 

DF %>% group_by(CNTRY) %>% 
    fill_(colnames(DF), .direction = "down") %>% 
    fill_(colnames(DF), .direction = "up") %>% 
    slice(1) 

# Source: local data frame [2 x 7] 
# Groups: CNTRY [2] 
# 
# CNTRY  V2  V3  V4  V5  V6  V7 
# <fctr> <fctr> <fctr> <fctr> <fctr> <fctr> <fctr> 
# 1 XXX  3  B  33  4  7 Four 
# 2 Yemen  1  B  3  4  5 Six 
2

우리는 tidyr 패키지 칠 사용 dplyr

library(dplyr) 
coalesce(x,y) 
#[1] "Yemen" "1"  "B"  "3"  "4"  "5"  "Six"