如何使用sqldf循环数据帧? [英] how to loop the dataframe using sqldf?

查看:120
本文介绍了如何使用sqldf循环数据帧?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

第一个代码:

样本数据:

vector1 <- data.frame("name"="a","age"=10,"gender"="m")
vector2 <-  data.frame("name"="b","age"=33,"gender"="m")
vector3 <-  data.frame("name"="b","age"=58,"gender"="f")
list <- list(vector1,vector2,vector3)

sql <- list()
for(i in 1:length(list)){
   print(list[[1]]) # access dataframe
   sql[[i]]<-
    sqldf(paste0("select name,gender,count(name) from ",list[[i]]," group by gender "))
}

如何使用sqldf函数正确循环数据帧?我已经尝试在sqldf函数中使用list [[1]]或list [1]进行测试,但它不会返回任何此类表或语法错误.在循环功能中,我可以访问数据帧.可以使用这种格式吗?

How to loop the data frame correctly using sqldf function? I have tried list[[1]] or list[1] in the sqldf function to do the test but it will return no such table or syntax error. In the loop function, I can access the data frame. Is it possible to use this format?

print(str(list))
List of 3
 $ :'data.frame':   1 obs. of  3 variables:
  ..$ name  : Factor w/ 1 level "a": 1
  ..$ age   : num 10
  ..$ gender: Factor w/ 1 level "m": 1
 $ :'data.frame':   1 obs. of  3 variables:
  ..$ name  : Factor w/ 1 level "b": 1
  ..$ age   : num 33
  ..$ gender: Factor w/ 1 level "m": 1
 $ :'data.frame':   1 obs. of  3 variables:
  ..$ name  : Factor w/ 1 level "b": 1
  ..$ age   : num 58
  ..$ gender: Factor w/ 1 level "f": 1
NULL

第二:

这是我的期望.

f<- lapply(list, function(dataframe) {
      sql <-
        sqldf("select name,gender,count(name) from dataframe group by gender ")
    })
    print(f)

这是输出.

> print(f)
[[1]]
  name gender count(name)
1    a      m           1

[[2]]
  name gender count(name)
1    b      m           1

[[3]]
  name gender count(name)
1    b      f           1

是否可以使用第一个代码访问列表?当我想使用粘贴功能访问列表中的每个数据框时,如何解决此问题.

Is it possible to use the first code to access the list? How to fix it when I want to use paste function to access each data frame in a list.

推荐答案

sqldf::sqldf是指环境中存在的对象.因此,只需创建DF <- list[[i]]并在查询中使用此名称即可.

sqldf::sqldf refers to the object existing in the environment. So, just create DF <- list[[i]] and use this name in query.

for(i in 1:length(list)){
  print(list[[1]]) # access dataframe
  DF <- list[[i]]
 sql[[i]]<- sqldf("select name,gender,count(name) from DF group by gender ")
}
print(sql)
# [[1]]
#   name gender count(name)
# 1    a      m           1
# 
# [[2]]
#   name gender count(name)
# 1    b      m           1
# 
# [[3]]
#   name gender count(name)
# 1    b      f           1

这篇关于如何使用sqldf循环数据帧?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆