我试图用main(?)的另一列中包含的值筛选嵌套的dataframe/list列数据帧.不幸的是,我下面的代码不起作用,我认为问题在于我在map_if
中引用search_term
的方式是不正确的.我怀疑它需要整个向量/列,而不是每行search_term
的单个值.我使用map_if判断要筛选的嵌套数据框是否为空(判断的是nested_data_nrow
中的行数).谢谢你的提示.非常感谢.在我的reprex下面.
library(tidyverse)
#> Warning: package 'dplyr' was built under R version 4.1.3
df_nest <- structure(list(nested_data = list(structure(list(places_bank_name = c(
"ZiraatBank",
"UniCredit Bank", "Sparkasse Bank", "Intesa Sanpaolo Banka",
"Raiffeisen BANK", "EKI"
)), row.names = c(NA, -6L), class = c(
"tbl_df",
"tbl", "data.frame"
)), structure(list(places_bank_name = c(
"Raiffeisen BANK (iPoslovnica)",
"KIB Banka", "Raiffeisen BANK - Agencija Bužim", "BBI Bosna Bank International"
)), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame")), structure(list(places_bank_name = "Casopis Financing"), row.names = c(
NA,
-1L
), class = c("tbl_df", "tbl", "data.frame")), structure(list(
places_bank_name = "UniCredit Bank"
), row.names = c(NA, -1L), class = c("tbl_df", "tbl", "data.frame"))), nested_data_nrow = c(
6,
4, 1, 1
), search_term = c(
"BBI|Bosna Banka", "Komercijalno-investiciona|KIB",
"Raiffeisen", "UniCredit"
), bank_name = c(
"Bosna Banka International",
"Komercijalno-investiciona banka d.d. V.Kladusa", "Raiffeisen Bank d.d. BiH",
"UniCredit d.d. Mostar"
)), row.names = c(NA, -4L), class = c(
"tbl_df",
"tbl", "data.frame"
))
df_nest
#> # A tibble: 4 x 4
#> nested_data nested_data_nrow search_term bank_name
#> <list> <dbl> <chr> <chr>
#> 1 <tibble [6 x 1]> 6 BBI|Bosna Banka Bosna Banka I~
#> 2 <tibble [4 x 1]> 4 Komercijalno-investiciona|KIB Komercijalno-~
#> 3 <tibble [1 x 1]> 1 Raiffeisen Raiffeisen Ba~
#> 4 <tibble [1 x 1]> 1 UniCredit UniCredit d.d~
df_nest_filtered <- df_nest %>%
mutate(nest_data_filtered = map_if(
nested_data,
nested_data_nrow > 0,
~ .x %>%
filter(str_detect(
places_bank_name,
regex(search_term, ignore_case = T)
))
)) %>%
mutate(nest_data_filtered_nrow = map_dbl(nest_data_filtered, nrow)) %>%
select(bank_name, search_term, everything())
#> Warning in stri_detect_regex(string, pattern, negate = negate, opts_regex =
#> opts(pattern)): longer object length is not a multiple of shorter object length
#> Error in `mutate()`:
#> ! Problem while computing `nest_data_filtered = map_if(...)`.
#> Caused by error in `filter()`:
#> ! Problem while computing `..1 = str_detect(places_bank_name,
#> regex(search_term, ignore_case = T))`.
#> x Input `..1` must be of size 1, not size 4.
由reprex package(v2.0.1)于2022年4月13日创建