将字符串作为变量分配给数据框

时间:2016-04-30 07:22:30

标签: r string variables variable-assignment

见下文

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()或类似的方法将表示变量的字符串分配给数据框。

我尝试过Parse和assign,但是他们仍然分配了df字符串而不是变量。

1 个答案:

答案 0 :(得分: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)
相关问题