R - 使用for循环测试多个数据帧

时间:2014-05-15 16:07:42

标签: r variables testing for-loop

在R中,我试图使用带有嵌套测试的for循环,以便将列附加到多个数据帧。

我遇到问题1)调用带有变量名的数据框,2)使用逻辑测试跳过。

例如,我创建了3个带数字的数据框,我想添加一个列为值的平方根。如果它会导致错误,我想跳过数据框。

以下是我到目前为止所做的事情:

df1 <- data.frame(a=c(1))
df2 <- data.frame(a=c(6))
df3 <- data.frame(a=c(-3))

df_lst$b<-
for(df_lst in c("df1","df2","df3"){
    ifelse(is.na(df_lst$a) = T, skip,
           df_list$b <- sqrt(df1$a)

})

在上面的示例中,我希望df1df2看到一个新列b,其中包含a列的平方根,然后没有任何反应到df3

非常感谢任何帮助,谢谢大家!

1 个答案:

答案 0 :(得分:1)

如果你需要为所有人做一些事情,那么让一堆data.frames围绕着不同的名字通常不是一个好主意。最好将它们存储在列表中。例如

mydfs&lt; -list(df1,df2,df3)

然后您可以使用lapply等来处理这些data.frames。例如

mydfs<-lapply(mydfs, function(x) {
    if(all(x$a>0)) {
        x$b<-sqrt(x$a)
    }
    x;
})

否则,将代码更改为

for(df_lst in c("df1","df2","df3")) {
    df<-get(df_lst)
    if( all(df$a>=0) ) {
       df$b <- sqrt(df$a)
    }
    assign(df_lst, df)
}

也应该有效,通常不被视为良好做法。