R语言 仅为列表中特定列的正值设置子集

sd2nnvve  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(147)

我用下面的代码来获取期权数据列表,并创建一个新的列表来获取看跌期权数据(only_puts_list

library(quantmod)
  Symbols<-c  ("AA","AAL","AAOI","ABBV","ABC","ABNB")
  Options.20221111 <- lapply(Symbols, getOptionChain)
  names(Options.20221111) <- Symbols
  only_puts_list <- lapply(Options.20221111, function(x) x$puts)

现在,我想对only_puts_list进行子集化,并创建一个新列表(即new_list1)来进行子集化,并仅获取only_puts_listChgPct列中具有正值的数据。
我想lapply应该可以工作,但是如何只应用于特定列ChgPct的正值呢?

zsohkypk

zsohkypk1#

我们可以在使用lapply循环list之后使用subset

new_list1 <- lapply(only_puts_list, subset, subset = ChgPct > 0)

如果我们检查输出,返回的大多数list元素只有0行,因为在'ChgPct'中没有正观察值。我们可以Filter以仅保留那些有任何行的元素

new_list1_sub <-  Filter(nrow, new_list1)
  • 输出
new_list1_sub
$ABBV
            ContractID ConractSize Currency Expiration Strike Last       Chg   ChgPct  Bid  Ask Vol  OI       LastTradeTime        IV
31 ABBV221202P00155000     REGULAR      USD 2022-12-02  155.0 0.66 0.1100000 20.00000 0.56 0.66  70 480 2022-11-29 13:10:43 0.2690503
32 ABBV221202P00157500     REGULAR      USD 2022-12-02  157.5 1.49 0.2400000 19.20000 1.41 1.51 544 383 2022-11-29 13:17:43 0.2627027
33 ABBV221202P00160000     REGULAR      USD 2022-12-02  160.0 3.05 0.4300001 16.41222 2.79 2.99  34 308 2022-11-29 12:07:54 0.2692944
34 ABBV221202P00162500     REGULAR      USD 2022-12-02  162.5 4.95 1.6499999 50.00000 4.80 5.05   6  28 2022-11-29 13:26:10 0.3017648
     ITM
31 FALSE
32 FALSE
33  TRUE
34  TRUE

$ABC
           ContractID ConractSize Currency Expiration Strike Last       Chg  ChgPct Bid Ask Vol  OI       LastTradeTime        IV   ITM
18 ABC221202P00165000     REGULAR      USD 2022-12-02    165 1.05 0.1999999 23.5294 0.6 0.8   3 111 2022-11-29 09:51:47 0.2710034 FALSE

相关问题