我写了一个函数,可以向数据框中添加列。你可以给这个列起名字,并进行一些检查...
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)]
}
例子:
df <- data.frame("a"=1:5, "b"=6:10)
append_col(df, list(c=1:5))
append_col(df, list(c=1:5), after=1)
append_col(df, list(c=1:5), after="a")
append_col(df, list(c=NA, d=4:8), after=1)
在函数末尾调用cbind并进行索引的一个优点是,数据框中的字符不会被强制转换为因子,如果使用
as.data.frame(append(x,cols,在= ind之后))
则会出现这种情况。