2016-09-07 3 views
3

data.frames 목록을 스택 싶지만 열의 데이터 형식이 다를 수 있습니다. 작전을 가장 낮은 공통 분모 (나의 경우에는 보통 character)로 강요하고 싶습니다.다른 데이터 형식의 bind_rows

이 스태킹은 data.frames의 거의 모든 목록을 허용하는 package function에서 발생합니다. ds_a$xbind_rows() 전에 문자에 강제로 적용하는 것은 현실적으로 불가능합니다.

ds_a <- data.frame(
    x = 1:6, 
    stringsAsFactors = FALSE 
) 
ds_b <- data.frame(
    x = c("z1", "z2"), 
    stringsAsFactors = FALSE 
) 

# These four implementations throw: 
# Error: Can not automatically convert from integer to character in column "x". 
ds_1 <- dplyr::bind_rows(ds_a, ds_b) 
ds_2 <- dplyr::bind_rows(ds_b, ds_a) 
ds_3 <- dplyr::bind_rows(list(ds_a, ds_b)) 
ds_4 <- dplyr::union_all(ds_a, ds_b) 

내가 단일 문자 벡터와 data.frame로 출력을하고 싶습니다 :

x 
1 1 
2 2 
3 3 
4 4 
5 5 
6 6 
7 z1 
8 z2 

나는 (레드 캡) 데이터베이스에서 메타 데이터를 사용하는 몇 가지 장기적인 계획을 가지고 강요에 영향을 줄 수는 있지만, 저는 스태킹 작업을위한 단기적인 일반적인 해결책이 있기를 바라고 있습니다.

+0

에서 rbindlist를 사용할 수 있습니다. 일괄 처리 된 API 호출을 함께 바인딩하려는 것으로 가정하므로 모두 동일한 이름을 가져야합니다. – Benjamin

+0

나는 보통 이런 상황에서 인자로 변환하지만 모든 컬럼을 인자 컬럼으로 변환하고 다시 변환하면 속도에 어떤 영향을 미치는지 확신 할 수 없다. – Hao

답변

5

우리는뿐만 아니라 rbind``와 함께 작동 data.table

library(data.table) 
rbindlist(list(ds_a, ds_b)) 
# x 
#1: 1 
#2: 2 
#3: 3 
#4: 4 
#5: 5 
#6: 6 
#7: z1 
#8: z2 
+0

그래서 이것을'data.table '-'tibble'에서 (그리고 가능하게는 다시)이 변환에서 어떤 손실이 있습니까? –

+0

@geryan 알지 못합니다. 'tibble '로 변환하면 일부 속성이 추가되고 다른 속성은 제거됩니다 – akrun

관련 문제