Использовать имена списков в качестве имен строк при преобразовании из pmap в pmap_dfr purrr - PullRequest
0 голосов
/ 06 июня 2019

У меня есть функция pmap, которая извлекает данные о запасах. Когда я использую pmap (), я получаю список с именами списков в качестве тикеров. Когда я использую pmap_dfr (), я получаю фрейм данных, но имена строк индексируются 1: N. Я бы хотел, чтобы названия строк были тикерами.

pmap(df, ~reqMktData(tws, twsOption(local = "", symbol = ..1, expiry = ..2, strike = ..3, right = "P"), eventWrapper = eWrapper.data(1), 
                     CALLBACK = snapShot))

[[1]]
    BidSize BidPrice AskPrice AskSize Last LastSize Volume
AEM       0       -1       -1       0 0.73       14    275

[[2]]
    BidSize BidPrice AskPrice AskSize Last LastSize Volume
AEM       0       -1       -1       0 1.39        1     19

[[3]]
    BidSize BidPrice AskPrice AskSize Last LastSize Volume
BHC       0       -1       -1       0  0.7       20     26

[[4]]
    BidSize BidPrice AskPrice AskSize Last LastSize Volume
BHC       0       -1       -1       0 1.15        1      1


pmap_dfr(df, ~reqMktData(tws, twsOption(local = "", symbol = ..1, expiry = ..2, strike = ..3, right = "P"), eventWrapper = eWrapper.data(1), 
                     CALLBACK = snapShot))

 BidSize BidPrice AskPrice AskSize Last LastSize Volume
1       0       -1       -1       0 0.73       14    261
2       0       -1       -1       0 1.39        1     18
3       0       -1       -1       0 0.70       20     46
4       0       -1       -1       0 1.15        1      1

Желаемый результат будет:

      BidSize BidPrice AskPrice AskSize Last LastSize Volume
AEM       0       -1       -1       0 0.73       14    261
AEM       0       -1       -1       0 1.39        1     18
BHC       0       -1       -1       0 0.70       20     46
BHC       0       -1       -1       0 1.15        1      1

Еще лучший результат будет:

 Ticker   BidSize BidPrice AskPrice AskSize Last LastSize Volume
1    AEM      0       -1       -1       0 0.73       14    261
2    AEM      0       -1       -1       0 1.39        1     18
3    BHC      0       -1       -1       0 0.70       20     46
4    BHC      0       -1       -1       0 1.15        1      1

Спасибо.

Ответы [ 2 ]

2 голосов
/ 06 июня 2019

Вы можете добавить новый столбец с rownames списка.

purrr::map_dfr(lst_df, ~{.x$ticker <- rownames(.x);.x})

Наоборот, если вы используете

df1 <- do.call(rbind, lst_df)

, имена строк сохраняются, которые при необходимости могут быть преобразованы в имена столбцов

df1$ticker <- rownames(df1)

где

lst_df <- pmap(df, ~reqMktData(tws, twsOption(local = "", symbol = ..1, 
          expiry = ..2, strike = ..3, right = "P"), 
          eventWrapper = eWrapper.data(1), CALLBACK = snapShot))
0 голосов
/ 06 июня 2019

Вы можете использовать tibble::rownames_to_column() в исходном вызове, тогда вы можете использовать pmap_dfr:

library(tidyverse)
pmap_dfr(df, ~reqMktData(
  tws, 
  twsOption(local = "", symbol = ..1, expiry = ..2, strike = ..3, right = "P"), 
  eventWrapper = eWrapper.data(1), 
  CALLBACK = snapShot) %>% 
  rownames_to_column("Ticker"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...