2011-10-12 30 views
36

Làm cách nào để hợp nhất các cột của hai khung dữ liệu, chứa một nhóm cột riêng biệt nhưng một số hàng có cùng tên? Các trường cho các hàng mà không xảy ra ở cả hai khung dữ liệu cần được lấp đầy với số không:Hợp nhất các khung dữ liệu dựa trên các tên gọi trong R

> d 
    a b c d e f g h i j 
1 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10 
2 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 
> e 
    k l m n o p q r s t 
1 11 12 13 14 15 16 17 18 19 20 
3 21 22 23 24 25 26 27 28 29 30 
> de 
    a b c d e f g h i j k l m n o p q r s t 
1 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10 11 12 13 14 15 16 17 18 19 20 
2 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0 0 0 0 0 0 0 0 0 0 
3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 21 22 23 24 25 26 27 28 29 30 

Trả lời

61

Xem ?merge:

tên "row.names" hoặc số 0 quy định cụ thể tên hàng .

Ví dụ:

R> de <- merge(d, e, by=0, all=TRUE) # merge by row names (by=0 or by="row.names") 
R> de[is.na(de)] <- 0     # replace NA values 
R> de 
    Row.names a b c d e f g h i j k l m n o p q r s 
1   1 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10 11 12 13 14 15 16 17 18 19 
2   2 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0 0 0 0 0 0 0 0 0 
3   3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 21 22 23 24 25 26 27 28 29 
    t 
1 20 
2 0 
3 30 
+0

Điều đó không công việc, cảm ơn. Có cách nào hiệu quả hơn không? Phải mất vài phút để hợp nhất hai cột với 200 nghìn hàng, thậm chí mất vài phút để hợp nhất một khung dữ liệu trống với khung dữ liệu một cột có 200 nghìn hàng ... – barbaz

+0

Có, hãy kiểm tra gói sqldf: http://code.google .com/p/sqldf/ – rcs

+5

và có cách nào để bảo toàn tên hàng không? và không khiến họ di chuyển trong một cột chuyên dụng? tất nhiên người ta có thể làm 'rownames (de) = de $ Row.names' sau đó, chỉ cần tự hỏi nếu có một cách để không phá vỡ nó ở nơi đầu tiên ... – barbaz

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