通过 `assign` 将新列分配给数据框
assigning new columns to data frame via `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
是否可以解释为什么会发生这种情况?
在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))
所以我有这个数据框 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
是否可以解释为什么会发生这种情况?
在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))