【问题标题】:Merge multiple vectors to a data frame将多个向量合并到一个数据框
【发布时间】:2019-02-22 23:02:03
【问题描述】:

我有一个 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? (不使用循环或应用,具有更好的内存分配和更快的处理)

【问题讨论】:

    标签: r dataframe merge


    【解决方案1】:

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

    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
    

    【讨论】:

    • cbind(df, data.frame(mget(allNames)))
    • 真的,@RonakShah。这更简单
    • 谢谢! (do.call(cbind, c(df, mget(allNames, envir = .GlobalEnv))) 正在返回一个没有名称的矩阵)
    • @Funny,是的,这就是我改变答案的原因
    • df[allNames] <- mget(allNames)
    猜你喜欢
    • 2015-08-07
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多