通过`assign`为数据帧分配新列

时间:2017-06-27 13:37:13

标签: r assign

所以我有这个数据框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)

我希望新的列能够显示在旧的df中。事实并非如此。

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

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

1 个答案:

答案 0 :(得分:2)

assign中,第一个参数是&#39; x&#39; - 这是一个以字符串形式给出的变量名。在这里,&#34; df&#34;是data.frame的对象名称。作为第二个参数,我们将新变量分配给value,即NA

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))