在 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
没有任何反应。
非常感谢任何帮助,谢谢大家!
最佳答案
如果您需要对所有 data.frames 进行操作,那么让一堆名称不同的 data.frames 通常不是一个好主意。您最好将它们存储在列表中。例如
mydfs<-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)
}
应该也可以,只是通常不被认为是好的做法。
关于R - 使用 for 循环测试多个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23683458/