所以我有这个数据框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
有没有解释为什么会发生这种情况?
答案 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))