2016-04-30 42 views
0

參見下面分配串的數據幀作爲變量

for(stockName in c("AAPLstock", "FBstock", "GOOGstock", "HPQstock", "MSFTstock", "YHOOstock")){ 
assign(paste(stockName), read.table(paste(stockName,'.txt', sep = ""), quote="\"", comment.char="")) } 

這創建這些變量。這是所有冷卻

ls(pattern = "stock") 
[1] "AAPLstock" "FBstock" "GOOGstock" "HPQstock" "MSFTstock" 
[6] "stockName" "YHOOstock" 

當我嘗試所有的人都分配到一個數據幀像下面

df<-list(ls(pattern = "stock")) 
> df 
[[1]] 
[1] "AAPLstock" "FBstock" "GOOGstock" "HPQstock" "MSFTstock" 
[6] "stockName" "YHOOstock" 

我要的是DF含有這些股票作爲變量,而不是字符串。所以下面的函數給我想要的結果

df <- list(AAPLstock, FBstock, GOOGstock, HPQstock, MSFTstock, YHOOstock) 

但是,這需要我輸入所有的變量。事情是,我會這樣做,但是會有更多的股票,我不想輸入100個變量的名稱,這將是一個痛苦的改變。所以我想要一種方法來使用ls()或類似的方法將代表變量的字符串賦值給數據框。

我試過解析和賦值,但它們仍然分配了df字符串而不是變量。

+0

爲什麼不跳過使用分配完全,並創建一個使用lapply在你stocknames的載體命名列表? – Heroka

+0

@何岡我該怎麼做? –

+1

'lapply(stockNameVector,function(stockName)read.table(paste(...)' –

回答

1

考慮使用mget()通過字符串引用來拉多個變量。

df <- data.frame(mget(ls(pattern = "stock")), stringsAsFactors = FALSE) 

但由於還提到考慮建設股票和rbind的運行列表的數據幀:

stockName <- c("AAPLstock", "FBstock", "GOOGstock", "HPQstock", "MSFTstock", "YHOOstock") 
listOfStocks <- lapply(stockName, 
         function(s) { 
          read.table(paste(s,'.txt', sep = ""), 
             quote="\"", comment.char="") 
         }) 
df <- do.call(rbind, listOfStocks)