r - 在 R 中的 for 循环中实现列表以从多个 dbfs 生成列名和数据类型表
问题描述
我正在尝试从多个 dbfs 中提取列名和关联的数据类型,并将结果放入表中以交叉引用哪些列名和数据类型出现在哪些 dbfs 中。我为此编写了一个初始 R 脚本作为试用版,仅使用两个 dbfs,它运行良好。问题是当我尝试调整脚本以迭代许多 dbfs 时,我不能完全得到正确的结果。
两个 dbfs 的脚本是:
library(foreign)
dbf05 <- read.dbf("path/data05.dbf")
dbf06 <- read.dbf("path/data06.dbf")
dbf05ColnamesDT <- lapply(dbf05,class)
dbf06ColnamesDT <- lapply(dbf06,class)
ColnamesDTList <- list(dbf05ColnamesDT, dbf06ColnamesDT)
maxLength <- max(lengths(ColnamesDTList)) #Get the max length of the lists in ColnamesDTList
#Create a df from the nested list, with equal length columns
ColnamesDTDf <- as.data.frame(do.call(rbind, lapply(ColnamesDTList, `length<-`, maxLength)))
#Rename rows
years <- 2005:2006
new.names <-NULL
for(i in 1:2){
new.names[i]<-paste("dbf", years[i], sep="")
}
row.names(ColnamesDTDf)<-new.names
这会产生一个像这样的表,这正是我想要的:
cname1 cname2 cname3 cname4 cname5 cname6
dbf2005 factor factor numeric numeric factor factor
dbf2006 numeric factor numeric factor numeric NULL
我的迭代脚本是:
library(foreign)
files <- list.files("path/", full.names = TRUE, pattern = "*.dbf$") #List files
BBcolnamesDTList <- list()
for (i in 1:14){
dbfs <- read.dbf(files[i])
ColnamesDT <- lapply(dbfs,class)
ColnamesDTList[[i]] <- list(ColnamesDT)
}
maxLength <- max(lengths(ColnamesDTList))
ColnamesDTDf <- as.data.frame(do.call(rbind, lapply(ColnamesDTList, `length<-`, maxLength)))
years <- 2005:2018
new.names <-NULL
for(i in 1:14){
new.names[i]<-paste("dbf", years[i], sep="")
}
row.names(ColnamesDTDf)<-new.names
这将生成一个表,其中只有一列包含列名列表:
V1
dbf2005 list(cname1 = “factor”, cname2 = “factor”, cname3 = “numeric”, …
dbf2006 list(cname1 = “numeric”, cname3 = “factor”, cname4 = “numeric”,…
另外,'''maxLength'''在第一个脚本中返回34但在迭代脚本中只返回1,这告诉我我在for循环中的列表结构不正确但我不确定如何正确实现它.
解决方案
推荐阅读
- github - 如何验证推送的提交?
- assembly - 为什么在 64 位模式下使用“DS:”段覆盖是非法的?
- visual-studio-2017 - VS2017:哪个函数导致断点超时?
- opengl - OpenGL - 有没有办法将深度值存储在 1 以上?
- mysql - SQL - 如何对彼此相对的行进行排序?
- android - Android字体文字区别
- angular - 安装 Angular Datatables 后出现 jQuery 错误
- c# - 在 razor 中使用 for 循环填充下拉列表
- vmware-clarity - 如何以编程方式选择选项卡?
- r - gmailr 包使用 R 查询 Gmail 统计信息