【发布时间】:2019-01-28 14:29:24
【问题描述】:
我在使用 map 函数或 for 循环为多个数据框创建新列时遇到问题。我有 25 个包含加密货币时间序列数据的数据框:
ls(pattern="USD")
[1] "ADA.USD" "BCH.USD" "BNB.USD" "BTC.USD" "BTG.USD" "DASH.USD" "DOGE.USD" "EOS.USD" "ETC.USD" "ETH.USD" "IOT.USD"
[12] "LINK.USD" "LTC.USD" "NEO.USD" "OMG.USD" "QTUM.USD" "TRX.USD" "USDT.USD" "WAVES.USD" "XEM.USD" "XLM.USD" "XMR.USD"
[23] "XRP.USD" "ZEC.USD" "ZRX.USD"
每个对象都是一个数据框,代表以美元表示的加密货币。每个数据框都有 2 列:日期和收盘价(收盘价)。例如:数据框“BTC.USD”代表美元中的比特币:
head(BTC.USD)
# A tibble: 6 x 2
Date Close
1 2015-12-31 430.
2 2016-01-01 434.
3 2016-01-02 434.
4 2016-01-03 431.
5 2016-01-04 433.
现在我想添加第三列,代表每日收益。
require(quantmod)
BTC.USD <- BTC.USD%>%mutate(Return= Delt(Close)*100)
对于单个对象(在本例中为比特币 [BTC.USD]),此代码可以正常工作:
> head(BTC.USD)
# A tibble: 6 x 3
Date Close Return[,"Delt.1.arithmetic"]
<date> <dbl> <dbl>
1 2015-12-31 430. NA
2 2016-01-01 434. 0.940
3 2016-01-02 434. -0.0622
4 2016-01-03 431. -0.696
5 2016-01-04 433. 0.608
6 2016-01-05 431. -0.489
现在我想使用映射函数或 for 循环计算所有 25 个数据帧(或加密货币)的回报,但我的代码不起作用:
temp = ls(pattern=".USD")
map(.x= temp,.f = mutate(Return= Delt(Close)*100))
is.data.frame(.data) 中的错误 ||是.list(.data) || is.environment(.data) : 缺少参数“.data”,没有默认值
for (i in seq_along(temp)) {mutate(Return= Delt(Close)*100)}
is.data.frame(.data) 中的错误 ||是.list(.data) || is.environment(.data) : 缺少参数“.data”,没有默认值
有人可以帮我吗?
【问题讨论】:
-
lapply(temp, function(x) mutate(x, Return = Delt(Close)*100))也许? -
变异错误(x, Return = Delt(Close) * 100) : is.data.frame(.data) ||是.list(.data) || is.environment(.data) 不是 TRUE
-
temp只是一个字符向量,它不包含任何实际数据。您需要将数据放入列表中,然后@LAP 的评论才会起作用。 -
我认为没有理由不将所有数据放在一个列表中。
标签: r for-loop map-function