2012-04-27 41 views
8

Tôi đang gặp khó khăn khi thêm một khung dữ liệu vào cuối một khung dữ liệu khác.Thêm một khung dữ liệu vào cuối một data.frame khác trong R

Tôi có một khung dữ liệu (gọi là DF1) có 1 hàng và 5 cột. Tôi có một dataframe (cho phép gọi nó là DF2) có 50 hàng, và 5 cột. Tôi thiết lập nó sao cho các cột giữa hai khung dữ liệu phù hợp - chúng có cùng các cột. Thực tế, DF1 là một phép tính dựa trên DF2.

Đây là những gì df1 trông giống như:

row.names  pt1  pt2  pt3  pt4 
    calc   0.93 0.45 0.28 0.54 

Đây là những gì DF2 trông giống như:

row.names  pt1  pt2  pt3  pt4 
    SNP1   AA  AG  AG  AA  
    SNP2   CT  CT  TC  CC 
    SNP3   GG  CG  CG  <NA> 
    SNP4   AA  GG  AG  AA 
    SNP5   <NA> <NA> <NA> <NA> 

df1 được coi là số lượng các điểm dữ liệu thực tế (# của các giá trị đó là không bị thiếu) chia cho tổng số giá trị có thể có.

SO .. Tôi muốn thêm df1 xuống đáy DF2 trông như thế này:

row.names  pt1  pt2  pt3  pt4 
    SNP1   AA  AG  AG  AA  
    SNP2   CT  CT  TC  CC 
    SNP3   GG  CG  CG  <NA> 
    SNP4   AA  GG  AG  AA 
    SNP5   <NA> <NA> <NA> <NA> 
    calc   0.93 0.45 0.28 0.54 

Khi tôi đã cố gắng sử dụng

both.dfs <- rbind(DF1, DF2) # DF1 is first here 

df1 là hàng đầu tiên trong DF2. Tôi CẦN nó là hàng LAST.

Khi tôi đã cố gắng sử dụng

both.dfs <- rbind(DF2, DF1) # DF2 is first here 

tôi nhận được một lỗi:

Warning messages: 
1: In `[<-.factor`(`*tmp*`, iseq, value = 0.84) : 
    invalid factor level, NAs generated 
2: In `[<-.factor`(`*tmp*`, iseq, value = 0.84) : 
    invalid factor level, NAs generated 
3: In `[<-.factor`(`*tmp*`, iseq, value = 0.84) : 
    invalid factor level, NAs generated 
4: In `[<-.factor`(`*tmp*`, iseq, value = 0.74) : 
    invalid factor level, NAs generated 

tôi đã cố gắng hợp nhất, tôi đã cố gắng thêm một hàng mới để DF2 và sau đó thể thay thế trong các giá trị của DF2..nothing dường như hoạt động! Tôi đang rất cần sự giúp đỡ! Bất kỳ ai?

+0

Câu trả lời ngắn gọn là bạn không thể (hoặc ít nhất bạn shouldn 't). Tất cả các cột của khung dữ liệu đều phải là các vectơ nguyên tử (tức là cùng một kiểu dữ liệu), và bạn đang cố gắng trộn số (DF1) và ký tự/yếu tố (DF2). – joran

+0

Nó sẽ "hoạt động" nếu các cột của DF2 là các ký tự chứ không phải là các yếu tố. Nhưng bạn vẫn có thể nên tìm một cách khác để liên kết các tập dữ liệu này. – joran

Trả lời

6

Đây là những gì bạn nên làm:

DFtranspose <- cbind(t(DF1[2, ]), t(DF2)) 
rownames(DFtranspose) <- DF1[1, ] 
3

Tôi đồng ý với nhận xét, rằng đây có thể là một ý tưởng tồi, nhưng dưới đây là cách bạn có thể làm điều đó.

Trước hết, với dữ liệu danh sách dựa trên danh sách sẽ không kết hợp quá tốt theo cách này. Nếu bạn muốn rbind dữ liệu, bạn sẽ tốt hơn off chuyển đổi chúng thành một ma trận. Lưu ý rằng bạn sẽ phải chọn một loại duy nhất cho mỗi hàng của khung dữ liệu, do đó bạn không thể giữ số của mình dưới dạng số nếu chúng bị ràng buộc với các ký tự. Nếu bạn sẵn sàng để điều trị tất cả mọi thứ như một nhân vật, cung cấp cho này một đi:

> df1 <- data.frame(pt1="a", pt2="b", row.names=1) 
> rownames(df1) <- "e" 
> df2 <- data.frame(letters[1:4], pt1=1:4, pt2=2:5, row.names=1) 
> rbind(as.matrix(df2), as.matrix(df1)) 
    pt1 pt2 
a "1" "2" 
b "2" "3" 
c "3" "4" 
d "4" "5" 
e "a" "b" 
Các vấn đề liên quan