如何在data.frame中动态创建新列?

如何在data.frame中动态创建新列?,r,R,类似问题 基本上我想在data.frame中创建一个新列。这可能是个坏习惯,但对于我所做的来说,这是个好办法 现在我试过: test <- iris create.new_var <- function(x) { assign(paste("test$", x, sep=""), test$Petal.Width) return(test) } test <- create.new.var('cheese') test不建议对此类操作使用assign。但是,如果

类似问题

基本上我想在data.frame中创建一个新列。这可能是个坏习惯,但对于我所做的来说,这是个好办法

现在我试过:

test <- iris
create.new_var <- function(x) {
  assign(paste("test$", x, sep=""), test$Petal.Width)
  return(test)
}

test <- create.new.var('cheese') 

test不建议对此类操作使用
assign
。但是,如果您需要尝试使用
assign
,一个可能的选项是

 create.new_var <- function(x){
  assign('test', `[[<-`(test, x, value=test$Petal.Width), envir=.GlobalEnv)
 }
 test <- create.new_var('cheese')
 head(test,3)
 #  Sepal.Length Sepal.Width Petal.Length Petal.Width Species cheese
 #1          5.1         3.5          1.4         0.2  setosa    0.2
 #2          4.9         3.0          1.4         0.2  setosa    0.2
 #3          4.7         3.2          1.3         0.2  setosa    0.2

你的答案很好!然而,我有点迷路了。许多其他的海报回复了,然后删除了这样的内容:create.new_var@PyPerUser是的,这将是推荐的方法。但是,我不知道他们为什么删除它。可能是因为在你的帖子中,你想尝试
assign
assign,而我在没有必要的时候直接选择了assign。回答的第二部分提供了一些额外的实用程序,允许我更改数据源-有没有一种方法可以实现这一点而不使用assign或paste?@PyPerUser这就是您刚才评论的方法,并且删除了中的解决方案post@PyPerUser尝试
create.new\u var2
create.new_var <- function(dat, x, x1){
  str1 <- deparse(substitute(dat))
  assign(str1, `[[<-`(dat, x, value=dat[,x1]), envir=.GlobalEnv)
}

test <- create.new_var(test, 'cheese', 'Petal.Width')
 create.new_var2 <- function(dat, x, x1){ 
                       dat[,x] <- dat[,x1]
                       dat}

 create.new_var2(test, 'cheese', 'Petal.Width')