如何获取列表中元素c取值最大的索引?
如何获取列表中元素c取值最大的索引?
嘿,这个需求用R的基础工具就能轻松解决,我给你分享几种实用的方法,你可以根据自己的习惯选:
方法一:用基础函数sapply搞定
先把列表里所有元素的"c"值提取成一个向量,再找最大值对应的索引:
# 提取所有元素的"c"值 c_values <- sapply(mylist, function(item) item[["c"]]) # 找到所有"c"值等于最大值的索引(如果有多个最大值会返回全部) max_indices <- which(c_values == max(c_values)) # 如果只需要第一个出现的最大值索引,用which.max更高效 first_max_index <- which.max(c_values)
举个贴合你例子的场景:假设你的mylist是这样的:
mylist <- list( list("a" = 1, "b" = 2, "c" = 5), list("a" = 3, "b" = 4, "c" = 7), list("a" = 6, "b" = 8, "c" = 9) )
运行上面的代码后,c_values会得到c(5,7,9),max_indices就是3,正好对应你说的第三个元素的"c"值最大。
方法二:用purrr包(适合tidyverse用户)
如果你平时习惯用tidyverse系列工具,purrr的map_dbl函数提取数值会更严谨:
library(purrr) # 提取"c"值为数值向量 c_values <- map_dbl(mylist, ~ .x[["c"]]) # 后续找索引的逻辑和方法一完全一样 max_indices <- which(c_values == max(c_values)) first_max_index <- which.max(c_values)
小提醒:如果你的列表里有元素不存在"c"这个键,最好提前做个检查,比如在提取的时候加个判断,避免报错:
c_values <- sapply(mylist, function(item) ifelse(exists("c", item), item[["c"]], NA))
这样缺失"c"的元素会被标记为NA,后续计算最大值时可以用max(c_values, na.rm = TRUE)来忽略这些缺失值。
备注:内容来源于stack exchange,提问作者Miquel
相关产品推荐
相关产品推荐

