问题描述
我正在尝试从许多dbfs中提取列名和相关的数据类型,并将结果放入表格中以交叉引用哪些列名和数据类型出现在哪些dbfs中。 dbf的列数不同,因此我用rbind
和lapply
在结果表中用NULL填充缺少的值。尽管我使用的脚本在一定程度上可以工作,但列名仅保留在初始dbf中。当出现新的列名时,会将数据添加到表中,但为这些列赋予名称V35,V36等,而不是实际的列名。
library(foreign)
files <- list.files("path/",full.names = TRUE,pattern = "*.dbf$") #List files
#Get column names and datatypes from dbfs and put into list
colnamesDTList <- list()
for (i in 1:14){
dbfs <- read.dbf(files[i])
ColnamesDT <- lapply(dbfs,class)
ColnamesDTList[[i]] <- ColnamesDT
}
maxLength <- max(lengths(ColnamesDTList)) #Get max length of the lists in ColnamesDTList
#Create a df from the lists in ColnamesDTList,with equal length columns
ColnamesDTDf <- as.data.frame(do.call(rbind,lapply(ColnamesDTList,`length<-`,maxLength)))
#Rename rows
years <- 2005:2018
new.names <-NULL
for(i in 1:14){
new.names[i]<-paste("dbf",years[i],sep="")
}
row.names(ColnamesDTDf)<-new.names
这将产生一个像这样的表:
cname1 cname2 cname3 V4 V5
dbf2005 factor factor numeric NULL NULL
dbf2006 numeric factor NULL factor numeric
因此,与其提供2006年以来的实际列名,不如给它们通用的“ V”加上出现它们的列号。如何获得表以包含dbf2006中的列名?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)