我对使用R进行编程非常陌生,但是我试图用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.
现在我想用数据框的名称(“ BTC.USD”)替换第二列的名称(“ Close”)
在这种情况下,我使用了以下代码:
colnames(BTC.USD)[2] <-deparse(substitute(BTC.USD))
这段代码按我的想象工作:
> head(BTC.USD)
# A tibble: 6 x 2
Date BTC.USD
1 2015-12-31 430.
2 2016-01-01 434.
3 2016-01-02 434.
现在,我正在尝试创建一个循环,以更改加密货币数据的所有25个数据帧的第二列名称:
df_list <- ls(pattern="USD")
for(i in df_list){
aux <- get(i)
(colnames(aux)[2] =df_list)
assign(i,aux)
}
但是代码没有按照我的想法工作。有人可以帮我弄清楚我所缺少的步骤吗?
提前谢谢!
答案 0 :(得分:0)
您可以使用 val base = "BASE"
whenever(currencyRepository.getRates(base))
.thenReturn(Observable.just(map))
viewModel.result().observeForever(observer)
viewModel.getRates(base)
testScheduler.advanceTimeTo(1, TimeUnit.SECONDS)
verify(observer).onChanged(
Resource.success(map)
)
来分配名称,即
Map
数据
Map(function(x, y) {names(x)[2] <- y; x}, l2, names(l2))
#$`a`
# v1 a
#1 3 8
#2 5 6
#3 2 7
#4 1 5
#5 4 4
#$b
# v1 b
#1 9 47
#2 18 48
#3 17 6
#4 5 25
#5 13 12