代码之家  ›  专栏  ›  技术社区  ›  amonk

通过“assign”将新列分配给数据帧`

  •  1
  • amonk  · 技术社区  · 7 年前

    我有这个数据框 df :

    df<-data.frame(a=runif(10),b=sample(10),c=c(1,2,3,NA,1,2,1,4,5,3))
    
    > head(df,2)
                 a  b  c
    1  0.503718016  4  1
    2  0.253538589 10  2
    

    因此,对于以下情况:

     >df$a_new<-NA
     > head(df,2)
                 a  b  c a_new
    1  0.503718016  4  1  NA
    2  0.253538589 10  2  NA
    

    然后,我想到了一个快速而肮脏的解决方案,即创建具有特殊名称的对象,例如: df$XXX_new 为什么不通过 assign XXX 表示在名称向量上运行的变量,即 names(df) :

    for(ll in names(df))
      assign(paste0("df$",ll,"_new"),NA)
    

    要显示给我的旧 测向 .事实并非如此。

    >head(df)
                 a  b  c a_new
    1  0.503718016  4  1  NA
    2  0.253538589 10  2  NA
    

    有没有解释为什么会发生这种情况?

    1 回复  |  直到 7 年前
        1
  •  2
  •   akrun    7 年前

    在里面 assign ,第一个参数是“x”-这是以字符串形式给出的变量名。这里,“df”是data.frame的对象名。作为第二个参数,我们将新变量分配给 value

    for(ll in names(df)) assign("df", `[<-`(df, paste0(ll, "_new"), value = NA))
    head(df, 2)
    #          a b c a_new b_new c_new
    #1 0.2925740 7 1    NA    NA    NA
    #2 0.2248911 4 2    NA    NA    NA
    

    数据

    set.seed(24)
    df<-data.frame(a=runif(10),b=sample(10),c=c(1,2,3,NA,1,2,1,4,5,3))