R语言 获取列表中等于特定条件的值

i34xakig  于 2023-01-03  发布在  其他
关注(0)|答案(4)|浏览(267)

有没有一种方法可以从列表中获取与特定值相等的值。例如

asd <- list(colb = structure(list(CNT = 1:3), class = "data.frame", row.names = c(NA,3L)), cola = structure(list(CNT = 1L), class = "data.frame", row.names = 1L), colc = structure(list(CNT = 2L), class = "data.frame", row.names = 2L))

这里我只需要获取cola,因为它有1行,值等于1。因此基本上条件是元素值应该等于1,并且只有1行

nvbavucw

nvbavucw1#

您可以根据自己的条件使用Filter,即

Filter(length, lapply(asd, \(i)which(nrow(i) == 1 & i$CNT == 1)))

#$cola
#[1] 1
o2g1uqev

o2g1uqev2#

解决问题的一个方法是:

Filter(function(x) nrow(x)==1 && all(x==1), asd)

$cola
  CNT
1   1
shstlldc

shstlldc3#

使用all.equal(..., check.attributes = FALSE)的技巧:

Filter(\(x) all.equal(x, 1, check.attributes = FALSE), asd)

# $cola
#   CNT
# 1   1
f3temu5u

f3temu5u4#

使用keep

library(purrr)
 keep(asd, ~ nrow(.x) == 1&&  1 %in% .x$CNT)
$cola
  CNT
1   1

相关问题