r-使用rbind并两次读取同一csv文件时出现行名重复错误



我有两个长度和列数相同的数据帧。我想做一个简单的rbind,但得到错误

> outputdf<-rbind(outputdf,currentcol)
Error in `row.names<-.data.frame`(`*tmp*`, value = value) : 
  duplicate 'row.names' are not allowed
In addition: Warning messages:
1: In `[<-.factor`(`*tmp*`, iseq, value = c(2L, 2L, 2L, 2L, 2L, 2L,  :
  invalid factor level, NA generated
2: non-unique values when setting 'row.names':

我之前得到过帮助,通过两次读取同一csv来构建两个数据帧,以获得不同的信息部分。我使用这两个数据帧来构建多个数据帧。然而,我在使用rbind时遇到了重复的行名错误。在阅读csv时,我已经尝试过row.names=FALSE,也使用rownames(dataframe)<-NULL进行刷新。我甚至试着重做行名,这样

rownames(dataframe2) <- c(nrow(dataframe1)+1):c(nrow(dataframe1)+nrow(dataframe2))

这给了我一个从上一个数据帧之后开始的范围,以避免重复的行名。

所有这些都失败了。我在想我是不是错过了什么。

这是代码,其中A是一个csv文件,我从excel表格转换而来

该文件看起来像

country     USA      Britain
state       NV       
product     peas       corn
   .
   .
source      cnn       fox news
jan-02       3           5   
feb-02       3           2
 .
 .

我早些时候帮助将其转换为这种格式的

country state product units time    ....  source
USA      NV     peas   3     Jan-02        cnn
USA      NV     peas   3     feb-02        cnn
Britain         corn   5     jan-02       fox news
Britain         corn   2     feb-02       fox news

代码是

        A<-filenames[1]
        #get data as separate df
        datacols <- read.csv(A, header = FALSE, skip = 11, strip.white = TRUE,row.names=NULL)[-c(2:4)]
        #get names as separate df
        names <- read.csv(A, header = FALSE, nrows = 11, strip.white = TRUE,row.names=NULL,stringsAsFactors=FALSE)[-c(1:4)]
        datanames<-c(1:11);datanames<-cbind(datanames,names)

        #convertedfile dataset
        outputdf<-data.frame()
        #addtime into dataframe
        timeframe<-datacols[1];colnames(timeframe)<-"time"
        for(colindex in 2:c(ncol(datacols))){
          currentcol<-timeframe

          #bind price col to the current dataframe
          price<-datacols[colindex];colnames(price)<-"Price"
          currentcol$Price<-price
          #add the country
          currentcol$Country<-as.character(datanames[[colindex]][1])
          #add market location
          check<-as.character(datanames[[colindex]][2])
          currentcol$Market_Location<-ifelse(nchar(check)<1,"na",check)
          #add market name
          check<-as.character(datanames[[colindex]][3])
          currentcol$Market<-ifelse(nchar(check)<1,"na",check)
          #add market latitude
          check<-as.character(datanames[[colindex]][4])
          currentcol$Market_Latitude<-ifelse(nchar(check)<1,"na",check)
          #add market longitude
          check<-as.character(datanames[[colindex]][5])
          currentcol$Market_Longitude<-ifelse(nchar(check)<1,"na",check)
          #add commodity
          check<-as.character(datanames[[colindex]][6])
          currentcol$Commodity<-ifelse(nchar(check)<1,"na",check)
          #add produit agricoles
          check<-as.character(datanames[[colindex]][7])
          currentcol$produit_agricoles<-ifelse(nchar(check)<1,"na",check)
          #add price type
          check<-as.character(datanames[[colindex]][8])
          currentcol$Price.Type<-ifelse(nchar(check)<1,"na",check)
          #add unit
          check<-as.character(datanames[[colindex]][9])
          currentcol$Unit<-ifelse(nchar(check)<1,"na",check)
          #add currency
          check<-as.character(datanames[[colindex]][10])
          currentcol$Currency<-ifelse(nchar(check)<1,"na",check)
          #add source
          check<-as.character(datanames[[colindex]][11])
          currentcol$Datasource<-ifelse(nchar(check)<1,"na",check)
          #bind dataframe
          outputdf<-rbind(outputdf,currentcol[1,])

我发现了问题,我试图合并的数据帧中包含列表,这就是为什么我得到了重复的行名错误。当我写了一个数据帧的测试csv,看到它有多糟糕时,我发现了这一点。我使用了列的cbind,而不是执行数据帧$newvariable&lt-创建数据帧的数据

最新更新