Kiểm tra chức năng bind_rows
trong gói dplyr
. Nó sẽ làm một số điều tốt đẹp cho bạn theo mặc định, chẳng hạn như điền vào các cột tồn tại trong một data.frame
nhưng không phải là khác với NA
s thay vì chỉ thất bại. Dưới đây là ví dụ:
# Use the dplyr package for binding rows and for selecting columns
library(dplyr)
# Generate some example data
a <- data.frame(a = rnorm(10), b = rnorm(10))
b <- data.frame(a = rnorm(5), c = rnorm(5))
# Stack data frames
bind_rows(a, b)
Source: local data frame [15 x 3]
a b c
1 2.2891895 0.1940835 NA
2 0.7620825 -0.2441634 NA
3 1.8289665 1.5280338 NA
4 -0.9851729 -0.7187585 NA
5 1.5829853 1.6609695 NA
6 0.9231296 1.8052112 NA
7 -0.58-0.6928449 NA
8 0.2033514 -0.6673596 NA
9 -0.8576628 0.5163021 NA
10 0.6296633 -1.2445280 NA
11 2.1693068 NA -0.2556584
12 -0.1048966 NA -0.3132198
13 0.2673514 NA -1.1181995
14 1.0937759 NA -2.5750115
15 -0.8147180 NA -1.5525338
Để giải quyết vấn đề trong câu hỏi của bạn, trước hết bạn muốn chọn các cột trong chủ của mình data.frame
. Nếu a
là trang chính data.frame
và b
chứa dữ liệu bạn muốn thêm, bạn có thể sử dụng chức năng select
từ dplyr
để nhận các cột bạn cần trước.
# Select all columns in b with the same names as in master data, a
# Use select_() instead of select() to do standard evaluation.
b <- select_(b, names(a))
# Combine
bind_rows(a, b)
Source: local data frame [15 x 2]
a b
1 2.2891895 0.1940835
2 0.7620825 -0.2441634
3 1.8289665 1.5280338
4 -0.9851729 -0.7187585
5 1.5829853 1.6609695
6 0.9231296 1.8052112
7 -0.58-0.6928449
8 0.2033514 -0.6673596
9 -0.8576628 0.5163021
10 0.6296633 -1.2445280
11 2.1693068 NA
12 -0.1048966 NA
13 0.2673514 NA
14 1.0937759 NA
15 -0.8147180 NA
Nếu bạn đang sử dụng 'dplyr', tại sao không chỉ sử dụng' bind_rows() '? – ialm
@ialm Đọc kỹ hơn, câu trả lời này * không * sử dụng bất kỳ chức năng 'dplyr' nào (nó chỉ tải gói). Cần lưu ý rằng việc tải 'plyr' * sau khi tải' dplyr' sẽ che dấu 'dplyr :: summaryize' và' dplyr :: mutate' bằng các phiên bản 'plyr' và không được khuyến nghị. – Gregor
@Gregor Vâng, tôi thấy điều đó ngay bây giờ. Và vì lý do bạn đánh dấu trong bình luận của bạn, có một cảnh báo được đưa ra nếu bạn tải 'plyr' sau' dplyr', và tôi tin Hadley khuyên bạn nên tải 'plyr' trước' dplyr' nếu bạn cần sử dụng cả hai gói. – ialm