【问题标题】:assigning new columns to data frame via `assign`通过“分配”将新列分配给数据框
【发布时间】: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_newb_newc_new
  • @akrun 确实是的
  • for(ll in names(df)) df[,paste0(ll,"_new")] &lt;- NA 将实现您正在寻找的东西,但我不确定您的方法为什么会这样!
  • @AndrewGustar 理解你的例子。用assign()怎么样?
  • assign 的帮助文本说“对于作为 x 给出的名称没有任何限制:它可以是非语法名称”,因此它可能无法识别$ 字符表示您希望它在 df 中工作。您肯定会对这些名称造成一些混淆!

标签: r assign


【解决方案1】:

assign 中,第一个参数是'x' - 它是一个以字符串形式给出的变量名。这里,“df”是 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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 2021-12-04
    • 2018-06-12
    • 2021-07-05
    • 1970-01-01
    • 2016-02-02
    • 2015-11-21
    相关资源
    最近更新 更多