【发布时间】:2018-06-09 21:31:22
【问题描述】:
第一个代码:
样本数据:
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] 进行测试,但它不会返回此类表或语法错误。在循环函数中,我可以访问数据框。可以使用这种格式吗?
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
是否可以使用第一个代码访问列表?当我想使用粘贴功能访问列表中的每个数据框时如何解决它。
【问题讨论】: