2016-03-08 36 views
0

我有麻煩輸入逗號分隔的.txt數據成R具有以下格式:輸入數據和分割行中的R與非標準色譜柱

stock1,TIME1,價格1,時間2,price2,時間3 ,price3
stock1,時間4,price4
stock2,TIME1,價格1,時間2,price2
stock2,時間3,price3

如上所見,列的每行中的數字是不標準。我想創建一個數據幀有三列(股票,時間和價格):

stock1時間1價格1
stock1時間2 price2
stock1時間3 price3
stock1時間4 price4
stock2時間1價格1
stock2時間2 price2
stock2時間3 price3

我如何分割每行,使我有渴望Desir編輯數據框?

我希望這很清楚,謝謝!

+0

預期產量是多少? – akrun

+0

我編輯了我的上述帖子以包含所需的輸出結構。希望澄清。 – abvmk3

回答

0

我把它用reshape()的工作,但它的醜陋:

input <- 'stock1,time1,price1,time2,price2,time3,price3\nstock1,time4,price4\nstock2,time1,price1,time2,price2\nstock2,time3,price3\n'; 
df <- read.csv(text=input,header=F,stringsAsFactors=F); ## replace text=input with file name 
subset(setNames(reshape(df,idvar='V1',dir='l',varying=lapply(2:3,seq,ncol(df),by=2L),new.row.names=seq_len(prod(dim(df))))[-2L],c('stock','time','price')),time!=''); 
## stock time price 
## 1 stock1 time1 price1 
## 2 stock1 time4 price4 
## 3 stock2 time1 price1 
## 4 stock2 time3 price3 
## 5 stock1 time2 price2 
## 7 stock2 time2 price2 
## 9 stock1 time3 price3 

注:

  • 從廣角到長格式去時,將varying參數必須指定一組寬列集必須在結果框架中堆疊成長列。如果存在多個這樣的寬列集合,則參數值必須是列表,其中每個組件都是設置爲堆棧的寬列的規範。我用lapply()簡明特技爲每個timeprice寬列集的運行seq()一次,傳遞給它起始列作爲第一個參數from2Ltime3Lprice),然後ncol(df)to2L作爲by,它產生所需的列表值。
  • new.row.names參數是必須的,因爲輸入數據在idvar(股票)列有重複,不幸的是,儘管reshape()的算法,從廣角到長格式轉換時重複的ID工作,它搶從勝利的下巴失利通過嘗試在結果框上設置行名,由於重複而失敗。我首先嚐試指定NULL作爲參數值,希望能夠防止完全設置行名,但它沒有效果;因此,我們需要計算一個唯一行名稱的實際向量以保持它的快樂,並且該向量必須足夠長才能覆蓋結果框架。我認爲seq_len(prod(dim(df)))是保證充分性的合理解決方案。