我有一个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
谢谢。
答案 0 :(得分:2)
您可以在列表的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))
答案 1 :(得分:0)
您可以在原始通话中使用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"))