【问题标题】:R - New variables over several data frames in a loopR - 循环中多个数据帧的新变量
【发布时间】:2016-05-30 10:17:13
【问题描述】:

在 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,但似乎没有一个常用的数据框运算符适用于该特定调用(不是

任何想法都将不胜感激,在此先感谢!

【问题讨论】:

    标签: r loops dataframe


    【解决方案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"))
     }
    

    【讨论】:

    • 很好的建议,谢谢!我正在使用assign 解决方案,效果很好
    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多