在R中,我有几个数据集,我想使用循环在每个数据集中创建新的变量(列):
所有数据帧都具有相同的名称结构,因此我正在使用它来循环它们。这是我想要做的一些伪代码
Name = Dataframe_1 #Assume the for-loop goes from Dataframe_1 to _10 (loop not shown)
#Pseudo-code
eval(as.name(Name))$NewVariable <- c("SomeString") #This is what I would like to do, but I get an error ("could not find function eval<-")
因此,我应该使用一个额外的列(NewVariable)具有相同的数据帧,其中所有行都具有值"SomeString"
。
如果我使用eval(as.name(Name))
我可以毫无问题地调用数据帧Name
,但通常的数据帧运算符似乎都不适用于该特定调用(不是&lt; - assignment,或$或[[]])
任何想法都会受到赞赏,提前谢谢!
答案 0 :(得分:1)
我们可以将数据集放在list
中,并通过使用list
循环lapply
来创建新列。如果需要,可以使用list2env
更新原始数据框对象。
lst <- mget(paste0('Dataframe_', 1:10))
lst1 <- lapply(lst, transform, NewVariable = "SomeString")
list2env(lst1, envir = .GlobalEnv())
或另一个选项是assign
nm1 <- ls(pattern = "^Dataframe_\\d+")
nm2 <- rep("NewVariable", length(nm1))
for(j in seq_along(nm1)){
assign(nm1[j], `[<-`(get(nm1[j]), nm2[j], value = "SomeString"))
}