我有一个包含12个数据帧的列表,每个数据帧都有9列。行数。
现在,我想遍历列表,并为每个数据框获取列Sum_of_weights
的五个最大值。
仅当我将列表导入到环境中并进行处理时,我才能解决我的问题,但是必须有一个更优雅的解决方案。我认为lapply
应该有可能,但我无法理解。
每个df都遵循以下原则:
$ Utilities :'data.frame': 28 obs. of 10 variables:
.. $ Price_to_Book : num [1:28] 164 177 102 118 199 191 245 99 287 126 ...
.. $ Price_Earnings : num [1:28] 39 253 202 272 361 178 303 212 301 215 ...
.. $ Dividend_Yield : num [1:28] 475 427 441 433 254 494 394 443 444 409 ...
.. $ Free_Cashflow_Yield: num [1:28] 63 67 98 145 80 188 95 71 62 83 ...
.. $ Operation_Margin : num [1:28] 229 286 257 355 425 204 311 329 435 247 ...
.. $ Debt_to_Equity : num [1:28] 480 312 320 327 356 430 425 311 426 314 ...
.. $ Earnings_Growth : num [1:28] 237 235 214 131 249 368 134 141 223 180 ...
.. $ Return on_Capital : num [1:28] 123 186 168 187 162 191 158 165 176 156 ...
.. $ Sum_of_weights : num [1:28] 1810 1943 1802 1968 2086 ...
.. $ Sector : Factor w/ 11 levels "Consumer Discretionary",..: 11 11 11 11 11 11 11 11 11 11 ...
.. ..- attr(*, "names")= chr [1:28] "AES.CORP" "ALLIANT.ENERGY.CORP" "AMEREN.CORPORATION" "AMERICAN.ELECTRIC.POWER" ...
答案 0 :(得分:2)
类似
library(dplyr);library(purrr)
your_list %>% map(top_n, 5, sum_of_weights)
可能会做到。
答案 1 :(得分:1)
这应该有效:
仅值
lapply(your_list, function(d) head(d$sum_of_weights[order(-d$sum_of_weights)], 5))
具有行名:
lapply(your_list, function(d) head(d["sum_of_weights"][order(-d$sum_of_weights)], 5))
整行:
lapply(your_list, function(d) head(d[order(-d$sum_of_weights), ], 5))