2013-12-09 14 views
-1

我有兩個長度和列數相同的數據框。我想做一個簡單的rbind,但得到的錯誤使用rbind複製rownames錯誤並讀取兩次相同的csv文件

> 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獲取的信息的不同部分兩次,建兩個dataframes。我正在使用這兩個數據幀來構建多個數據幀。但是,在使用rbind時,我遇到了重複的rownames錯誤。我在閱讀csvs時已嘗試row.names=FALSE,並且還使用rownames(dataframe)<-NULL進行刷新。我甚至想重做rownames使

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

這給了我,以前的數據幀後開始,以避免重複列名稱的範圍。

所有這些都失敗了。我想知道我是否錯過了一些東西。

下面是代碼,其中A是我從一個Excel工作表

文件看起來像

country  USA  Britain 
state  NV  
product  peas  corn 
    . 
    . 
source  cnn  fox news 

jan-02  3   5 
feb-02  3   2 
. 
. 

我早些時候曾幫助將其轉換成這種格式轉換csv文件

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,]) 
+1

您可以給出更具體的數據示例,例如原始數據的子集,以便人們可以知道真正發生了什麼?使用'dput'來獲得可重複的例子。 – alittleboy

+0

當您從原始數據對這兩個數據幀進行採樣時,您在兩個新數據幀中採樣的行是否有重疊? – StrikeR

+0

當然更新代碼 – BaconDoggie

回答

-1

我發現問題,我試圖合併包含列表裏面的數據框,這就是爲什麼我得到了重複的rowname錯誤。當我寫了一個數據框的測試csv並且看到它是如何搞砸的時候,我發現了這一點。我使用cbind的列而不是數據框$ newvariable < -data創建數據框