将多个向量合并到一个数据帧

时间:2019-02-22 08:37:32

标签: r dataframe merge

我有一个data.frame df,大约有300个独立的数字矢量,以及一个包含所有300个矢量名称的字符矢量。

allNames
 [1] "x.1"  "x.2"  "x.3"  "x.4"  "x.5"  "x.6"  "x.7"  "x.8"  "x.9"  "x.10" ...

我想将所有这些向量与data.frame df结合在一起。我的解决方案是:

for (name in allNames){
  if( length(get(names)) == nrow(df)){
    df = data.frame(df, get(name))
    names(df)[ncol(df)] = paste(name)
  }
}

有没有更有效的方法将这些向量组合到df? (无需使用循环或套用,具有更好的内存分配和更快的处理速度)

1 个答案:

答案 0 :(得分:2)

是的,有一种更简单的方法。这是一个可重现的示例:

df = data.frame(abc = "a", def = "b")
x1 = 1
x2 = 2
x3 = 3
allNames = c("x1", "x2", "x3")

df2 = cbind(df, do.call(cbind, mget(allNames, envir = .GlobalEnv)))

df2
# abc def x1 x2 x3
#1   a   b  1  2  3

str(df2)

#'data.frame':  1 obs. of  5 variables:
# $ abc: Factor w/ 1 level "a": 1
# $ def: Factor w/ 1 level "b": 1
# $ x1 : num 1
# $ x2 : num 2
# $ x3 : num 3