2013-05-07 31 views
6

Có ai biết cách giữ tên miền trong hàm rbind.fill không.Giữ tên hàng khi sử dụng rbind.fill trong R

library(plyr) 

#creating data 
a <- mtcars[ 1:5 , c("mpg","hp","gear") ] 
b <- mtcars[ 6:10 , c("mpg","disp","gear") ] 

#does not work because there are different colnames 
rbind(a,b) 

#works but eliminates the rownames 
bound <- rbind.fill(a , b) 

Tôi đang thiết lập vòng lặp nơi các đối tượng sẽ được kết nối bằng cách sử dụng rbind.fill. Hiện tại, tôi đang sử dụng chức năng kết hợp như sau:

namess <- c(rownames(a) , rownames(b)) 
rownames(bound) <- namess 

Tôi nghĩ rằng có thể có cách tốt hơn. Cảm ơn!

+0

Tôi xem đây là lỗi. Tôi không biết nếu 'plyr' có một diễn đàn báo cáo lỗi/địa điểm, nhưng nếu nó có ai đó nên liên kết với nó và điều này nên được gửi imo. – eddi

+1

@eddi đã đồng ý :) tôi vừa gửi nó trên github https://github.com/hadley/plyr/issues/156 –

+1

Plyr không hỗ trợ tên hàng. Đó là một ý tưởng tốt hơn để đặt chúng trong một biến, và sau đó đối phó với chúng một cách rõ ràng. – hadley

Trả lời

0

Vì tôi đã đăng câu hỏi này 5 năm trước - một chức năng mới đã có sẵn. smartbind giải quyết vấn đề này.

library(gtools) 

#creating data 
a <- mtcars[ 1:5 , c("mpg","hp","gear") ] 
b <- mtcars[ 6:10 , c("mpg","disp","gear") ] 

smartbind(a , b) 
2

Bạn có thể thử áp dụng một chức năng tùy chỉnh mà thực hiện rbind.fill và đặt rownames ban đầu tự như thế:

# List of sample data 
ab.list <- list(a <- mtcars[1:5 , c("mpg","hp","gear")], 
       b <- mtcars[6:10 , c("mpg","disp","gear")]) 

# Apply custom function (rbind and rownames adjustment) to sample data 
do.call(function(...) { 

    tmp <- plyr::rbind.fill(...) 
    rownames(tmp) <- sapply(ab.list, function(i) { 
    rownames(i) 
    }) 

    return(tmp) 

}, ab.list) 

        mpg hp gear disp 
Mazda RX4   21.0 110 4 NA 
Mazda RX4 Wag  21.0 110 4 NA 
Datsun 710  22.8 93 4 NA 
Hornet 4 Drive 21.4 110 3 NA 
Hornet Sportabout 18.7 175 3 NA 
Valiant   18.1 NA 3 225.0 
Duster 360  14.3 NA 3 360.0 
Merc 240D   24.4 NA 4 146.7 
Merc 230   22.8 NA 4 140.8 
Merc 280   19.2 NA 4 167.6 

Check-out this previous post rằng đề với một vấn đề tương tự.

+1

Có lẽ tốt hơn nên trích xuất các tên hàng đầu tiên từ bên trong hàm bằng cách phân tích cú pháp các đối số trong '...' hơn là quay trở lại khung cha cho chúng. – joran

+0

@ joran, vui lòng chỉnh sửa :-) – fdetsch

+0

Tôi thực sự gặp khó khăn trong việc đưa ra một cách thanh lịch để xử lý cả hai thông qua 'ab.list' _and_' ab.list [[1]], ab.list [ [2]] 'riêng biệt. – joran

Các vấn đề liên quan