R用循环用数据框名称替换列名称

时间:2019-01-15 11:48:22

标签: r rename

我对使用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)
}

但是代码没有按照我的想法工作。有人可以帮我弄清楚我所缺少的步骤吗?

提前谢谢!

1 个答案:

答案 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