在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)
})
在上面的示例中,我希望df1
和df2
看到一个新列b
,其中包含a
列的平方根,然后没有任何反应到df3
。
非常感谢任何帮助,谢谢大家!
答案 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)
}
也应该有效,通常不被视为良好做法。