Tôi đã viết một hàm để nối thêm cột vào (vào) một data.frame. Nó cho phép bạn đặt tên cho cột là tốt, và thực hiện một vài kiểm tra ...
append_col <- function(x, cols, after=length(x)) {
x <- as.data.frame(x)
if (is.character(after)) {
ind <- which(colnames(x) == after)
if (any(is.null(ind))) stop(after, "not found in colnames(x)\n")
} else if (is.numeric(after)) {
ind <- after
}
stopifnot(all(ind <= ncol(x)))
cbind(x, cols)[, append(1:ncol(x), ncol(x) + 1:length(cols), after=ind)]
}
ví dụ:
# create data
df <- data.frame("a"=1:5, "b"=6:10)
# append column
append_col(df, list(c=1:5))
# append after an column index
append_col(df, list(c=1:5), after=1)
# or after a named column
append_col(df, list(c=1:5), after="a")
# multiple columns/single values work as expected
append_col(df, list(c=NA, d=4:8), after=1)
(Một lợi thế của gọi cbind vào cuối của hàm và lập chỉ mục là các ký tự trong data.frame không bị ép buộc bởi các yếu tố như trường hợp nếu sử dụng as.data.frame(append(x, cols, after=ind))
)