[
https://issues.apache.org/jira/browse/ARROW-16641?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17542142#comment-17542142
]
Will Jones commented on ARROW-16641:
------------------------------------
Yes that option doesn't seem to do anything here. I think the semantics are a
little tough to design for that. {{list_parent_indices}} returns a value per
value in the subarray; if there are zero values, should there not be zero
indices?
It does make this set filtering more awkward though; this probably deserves
it's own function.
A different approach might be constructing the indices to exclude:
{code:R}
library(arrow)
library(dplyr)
# Filter `tab` for any `tab$x` in that doesn't contain value in `exclude`
exclude <- Array$create(c(1))
tab <- arrow_table(
x = Array$create(list(c(1, 2), c(3, 2), c(), c(1, 3))),
y = Array$create(c("a", "b", "c", "d"))
)
tab_exploded <- arrow_table(
i = call_function("list_parent_indices", tab$x),
x_flat = call_function("list_flatten", tab$x)
#x_flat = tab$x$chunk(0)$values()
)
to_drop <- tab_exploded %>%
group_by(i) %>%
summarise(to_drop = any((x_flat %in% exclude))) %>%
filter(to_drop) %>%
compute() %>%
.$i
selection <- !(1:nrow(tab) %in% as.vector(to_drop + 1))
res <- tab[selection,]
as_tibble(res)
#> # A tibble: 2 × 2
#> x y
#> <list<double>> <chr>
#> 1 [2] b
#> 2 c
res$x
#> ChunkedArray
#> [
#> [
#> [
#> 3,
#> 2
#> ],
#> null
#> ]
#> ]
{code}
> [R] How to filter array columns?
> --------------------------------
>
> Key: ARROW-16641
> URL: https://issues.apache.org/jira/browse/ARROW-16641
> Project: Apache Arrow
> Issue Type: Wish
> Components: R
> Reporter: Vladimir
> Priority: Minor
> Fix For: 8.0.0
>
>
> In the parquet data we have, there is a column with the array data type
> ({*}list<array_element <string>>{*}), which flags records that have different
> issues. For each record, multiple values could be stored in the column. For
> example, `{_}[A, B, C]{_}`.
> I'm trying to perform a data filtering step and exclude some flagged records.
> Filtering is trivial for the regular columns that contain just a single
> value. E.g.,
> {code:java}
> flags_to_exclude <- c("A", "B")
> datt %>% filter(! col %in% flags_to_exclude)
> {code}
> Given the array column, is it possible to exclude records with at least one
> of the flags from `flags_to_exclude` using the arrow R package?
> I really appreciate any advice you can provide!
--
This message was sent by Atlassian Jira
(v8.20.7#820007)