我有一个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
? (无需使用循环或套用,具有更好的内存分配和更快的处理速度)
答案 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