当生成一个表以交叉引用R中多个dbf的列名和数据类型时,如何重现所有列名

问题描述

这是对Implementing lists in a for loop in R to produce a table of column names and datatypes from multiple dbfs的跟进问题。

我正在尝试从许多dbfs中提取列名和相关的数据类型,并将结果放入表格中以交叉引用哪些列名和数据类型出现在哪些dbfs中。 dbf的列数不同,因此我用rbindlapply在结果表中用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 (将#修改为@)