合并数据时删除某些行

时间:2019-02-21 12:03:06

标签: r data.table

我有一个代码,用于合并Excel表中的数据。该代码获取表中的每一列,并将其与另一个表中的同一列合并。表格相同,数据每月更改一次。这将为每一列创建一个时间序列。

代码如下(我使用的数据可以找到here。我的目标是为提供者电子表格中的“提供者按测试”标签为追溯至4月16日的每一列创建一个时间序列):

library(readxl)
library(openxlsx)
library(data.table)

files <- choose.files()

mylist <- list()
mylist2 <- list()
mergedlist <- list()
columns <- c(5, 6, 7)
dumName <- NULL
oldRows<-0
newRows<-0

    for(i in 1:length(files)){
  dumName<-paste0("name ",i)
  dummy<-as.data.frame(read_excel(files[i],sheet="Provider by Test",range="D15:AC3150",na=c("NULL","NA", "#N/A",'-','')))
  dummy<-dummy[rowSums(is.na(dummy))!=ncol(dummy),]

  vecX<-c()
  vecR<-c(1:11)
  for(z in 1:nrow(dummy)){#identifying unneeded rows
    if(any(vecR==as.numeric(dummy[z,3]))){
      vecX<-append(vecX,z)
    }
  }

  dummy<-dummy[-vecX,]
  dummy$id<-paste0(dummy[,1],",",dummy[,3])

  if(i==1){
    oldRows<-nrow(dummy)
    for(j in 1:length(columns)){
      mylist[[j]]<-data.table(dummy[,c(columns[j],27)])
    }
  }else{
    newRows<-nrow(dummy)
    for(j in 1:length(columns)){
      mylist2[[j]]<-data.table(dummy[,c(columns[j],27)])
      colnames(mylist2[[j]])[1]<-dumName
      if(oldRows>newRows){
        mergedlist[[j]]<-merge(x=mylist[[j]],y=mylist2[[j]],by="id",all.x=TRUE)
      }else if(oldRows<newRows){
        mergedlist[[j]]<-merge(x=mylist[[j]],y=mylist2[[j]],by="id",all.y=TRUE)
      }else if(oldRows==newRows){
        mergedlist[[j]]<-merge(x=mylist[[j]],y=mylist2[[j]],by="id",all=TRUE)
      }
      mylist[[j]]<-mergedlist[[j]]
      newRows<-oldRows
    }

  }
}

wb <- loadWorkbook(choose.files())
writeData(wb, sheet=5, mergedlist[[1]])
writeData(wb, sheet=6, mergedlist[[2]])
writeData(wb, sheet=7, mergedlist[[3]])


saveWorkbook(wb, choose.files(), overwrite=TRUE)

我注意到mergedlist的第一个元素总是缺少一些数据行。经过一番摸索之后,我注意到合并数据时使用的“ if”语句存在问题。

我希望这段代码对具有所有数据的mergedlist列表的第一个元素执行已经完成的工作。

我对在数据表上使用merge()函数不是很熟悉,所以这可能是编码不良的问题。

0 个答案:

没有答案