我有一个数据框,每行有6行SQL查询。我想执行每个查询并将输出分配给数据帧。目前我有6行代码如下:
df6 <- tbl(conn,sql(df[6,]))
有没有办法可以使用dplyr mutate函数循环并在一个语句中分配相同的内容?
我在下面尝试过:
i <- 1:nrow(df)
df %>% mutate(paste0('df',i) <- tbl(conn,sql(df[i,])))
这会引发以下错误:
错误:列
q1
必须是1d原子向量或列表。
感谢任何帮助。
答案 0 :(得分:1)
您的问题似乎有点不清楚,但假设您的数据框中有一个标题为'sql_code'的列,您只需将函数应用于该列中的每个元素
lapply(df$sql_code, function(x) tbl(conn, sql(x)))
您最终会得到一个可以与bind_cols()
放在一起的列表(如果数据框的尺寸相同)
答案 1 :(得分:0)
在Shinobi_Atobe的功能帮助下,我可以将其发展成我想要的,如下所示:
list2env(setNames(lapply(df$sql_query,function(x) {tbl(conn, sql(x))}), paste0('df', 1:nrow(df))), envir=.GlobalEnv)
这将从数据框中的每一行执行sql查询,并将输出存储在名为df1,df2 ...
的各个数据帧中