R замените имя столбца именем фрейма данных на карту-функцию - PullRequest
0 голосов
/ 16 января 2019

У меня проблема с заменой имени столбца на имя информационного кадра на функцию карты. У меня 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 фреймов данных криптовалюты с помощью функции map:

names_of_dataframes <- ls.str(mode = "list")
map(names_of_dataframes, colnames(x)[2] <- names_of_dataframes[[i]])

Но это не работает. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 16 января 2019

Мы получаем наборы данных в list с mget, циклически перебирая list с imap, rename во 2-й столбец с .y, который дает data.frame имя объекта

library(tidyverse)
mget(ls(pattern="USD")) %>%         
              imap(~ {nm1 <- .y
                      .x %>% 
                         rename_at(2, ~ nm1) })
...