首页 > 解决方案 > 使用循环检索R中向量中每个元素的数据并组装一个新的数据框

问题描述

我有一个向量crypto_coins <- c("bitcoin","polkadot","dogecoin")和一个函数return_chart("coin_name"),它返回给定加密的一些数据(例如return_chart("bitcoin"))。

中的每日价格return_chart存储在一个列中prices。例如:

return_chart("bitcoin")[, "prices"] #returns every daily price of bitcoin for last 30 days

我想创建一个 FOR(或 WHILE)循环,这将允许我 1)检索向量中每种货币的数据和 2)组装一个新的数据框Crypto_data。该数据框应包含:

  1. 第一列中的硬币名称。
  2. 第二列中每枚硬币的平均价格(按每日平均价格计算)。
  3. 第三列中每枚硬币的平均价格的标准差。

请让我知道如何创建这样的循环。先感谢您。

标签: rdataframefor-loopvectorwhile-loop

解决方案


首先,为平均价格和标准误差创建具有初始化的零列的输出数据框:

crypto_coins <- c("bitcoin","polkadot","dogecoin")
df = data.frame(coin_name = crypto_coins, average = rep(0,length(crypto_coins)), SE = rep(0,length(crypto_coins)))

对于 的每个元素crypto_coins,您希望有一个平均值和一个 SE。所以你想要一个长度为 的循环crypto_coins,收集每个方差的均值和平方根:

for (i in 1:length(crypto_coins))
{
  df$average[i] = mean(return_chart(crypto_coin[i])[,"prices"])
  df$SE[i] = sqrt(var(return_chart(crypto_coin[i])[,"prices"]))
}

crypto_coin[i]是 的i第 th 元素crypto_coindf$average[i]是数据框列的i第 th 元素。和函数计算向量的均值和方差。averagedfmean(x)var(x)x



更简洁地说,这可以通过使用来编写sapply()

averages <- sapply(1:length(crypto_coins), function(x) mean(return_chart(crypto_coin[x])[,"prices"]))
SEs <- sapply(1:length(crypto_coins), function(x) sqrt(var(return_chart(crypto_coin[x])[,"prices"])))
df = data.frame(coin = crypto_coins, average = averages, SE = SEs)

推荐阅读