【发布时间】:2017-06-27 13:37:13
【问题描述】:
所以我有这个数据框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
有没有解释为什么会发生这种情况?
【问题讨论】:
-
您是否希望拥有
a_new、b_new和c_new? -
@akrun 确实是的
-
for(ll in names(df)) df[,paste0(ll,"_new")] <- NA将实现您正在寻找的东西,但我不确定您的方法为什么会这样! -
@AndrewGustar 理解你的例子。用
assign()怎么样? -
assign的帮助文本说“对于作为 x 给出的名称没有任何限制:它可以是非语法名称”,因此它可能无法识别$字符表示您希望它在 df 中工作。您肯定会对这些名称造成一些混淆!