R заменить имя столбца на имя кадра данных с циклом - PullRequest
0 голосов
/ 15 января 2019

Я очень плохо знаком с программированием на 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»)

Для этого случая я использовал следующий код:

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 голосов
/ 15 января 2019

Вы можете использовать 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

DATA

dput(l2)
list(a = structure(list(v1 = c(3L, 5L, 2L, 1L, 4L), v2 = c(8L, 
6L, 7L, 5L, 4L)), class = "data.frame", row.names = c(NA, -5L
)), b = structure(list(v1 = c(9L, 18L, 17L, 5L, 13L), v2 = c(47L, 
48L, 6L, 25L, 12L)), class = "data.frame", row.names = c(NA, 
-5L)))
...