【发布时间】:2018-05-29 04:52:06
【问题描述】:
一般我们如何通过 dplyr 中的列表变量进行过滤?
例如一个数据框,其中一个变量是不同类别对象的列表:
aa <- tibble(ss = c(1,2),
dd = list(NA,
matrix(data = c(1,2,3,4),
nrow = 2,
ncol = 2)))
> aa
# A tibble: 2 x 2
# ss dd
# <dbl> <list>
#1 1.00 <lgl [1]>
#2 2.00 <dbl [2 × 2]>
例如,如果我想过滤逻辑(虽然可以是任何东西),如果它不是一个列表,它会很简单:
aa %>% filter(is.logical(dd))
但这会返回
# A tibble: 0 x 2
# ... with 2 variables: ss <dbl>, dd <list>
因为不是第一个元素是合乎逻辑的,所以它是第一个元素的第一个元素:
> is.logical(aa$dd[1])
# [1] FALSE
> is.logical(aa$dd[[1]])
# [1] TRUE
可以使用purrr:map 对嵌套列表变量进行其他操作,但这也不起作用。
> aa %>% filter(map(.x = dd,
+ .f = is.logical))
# Error in filter_impl(.data, quo) : basic_string::resize
我在这里错过了什么?
【问题讨论】: