【问题标题】:Assigning strings to a data frame as variables将字符串作为变量分配给数据框
【发布时间】:2016-08-25 10:10:58
【问题描述】:

见下文

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 字符串而不是变量。

【问题讨论】:

  • 为什么不完全跳过使用 assign ,并使用 lapply 在您的股票名称向量上创建一个命名列表?
  • @Heroka 我该怎么做?
  • lapply(stockNameVector, function(stockName) read.table(paste(... )

标签: r string variables variable-assignment


【解决方案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)

【讨论】:

    猜你喜欢
    • 2018-10-21
    • 2021-11-28
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 2013-04-18
    • 1970-01-01
    相关资源
    最近更新 更多