gpt4 book ai didi

r - 如何过滤列表列的元素

转载 作者:行者123 更新时间:2023-12-04 11:24:49 24 4
gpt4 key购买 nike

我有一个包含 3 个变量的数据框 (df):

  • ID(第一个 id 变量)
  • ID2(第二个 id 变量)
  • 数据(使用 tidyr::nest() 函数创建的列表列。

    library(tidyverse)
    library(lubridate)

    dates <- ymd(c('2018-02-01', '2018-02-06', '2018-02-10',
    '2018-02-21', '2018-04-05'))
    df.1 <- tibble(ID = paste0('ID_', rep(1, 5)),
    ID2 = LETTERS[1:5],
    DATE = dates) %>%
    group_by(ID) %>%
    nest()


    df.2 <- tibble(ID = paste0('ID_', rep(1, 6)),
    ID2 = LETTERS[1:6])


    df <- df.1 %>%
    left_join(df.2, by = 'ID')

列表列(数据)包含 2 个变量:

  • ID2
  • 日期

我想保留列表列 (data[[DATE]]) 中的所有元素,其中 data[[ID2]] != df$ID2

有没有什么方法可以应用过滤器功能——也许是 purrr 包?

非常感谢!

最佳答案

我们可以使用map2。我们将列表列 (data) 作为 .x 参数,将 df$ID2 作为 .y 参数,在每个 .x 上过滤,其中 .x$ID2 != .y:

library(tidyverse)

output <- df %>%
mutate(data = data %>% map2(ID2, ~ filter(.x, ID2 != .y)))

输出:

> output
# A tibble: 6 x 3
ID data ID2
<chr> <list> <chr>
1 ID_1 <tibble [4 x 2]> A
2 ID_1 <tibble [4 x 2]> B
3 ID_1 <tibble [4 x 2]> C
4 ID_1 <tibble [4 x 2]> D
5 ID_1 <tibble [4 x 2]> E
6 ID_1 <tibble [5 x 2]> F

> output %>%
+ pull(data)
[[1]]
# A tibble: 4 x 2
ID2 DATE
<chr> <date>
1 B 2018-02-06
2 C 2018-02-10
3 D 2018-02-21
4 E 2018-04-05

[[2]]
# A tibble: 4 x 2
ID2 DATE
<chr> <date>
1 A 2018-02-01
2 C 2018-02-10
3 D 2018-02-21
4 E 2018-04-05

[[3]]
# A tibble: 4 x 2
ID2 DATE
<chr> <date>
1 A 2018-02-01
2 B 2018-02-06
3 D 2018-02-21
4 E 2018-04-05

[[4]]
# A tibble: 4 x 2
ID2 DATE
<chr> <date>
1 A 2018-02-01
2 B 2018-02-06
3 C 2018-02-10
4 E 2018-04-05

[[5]]
# A tibble: 4 x 2
ID2 DATE
<chr> <date>
1 A 2018-02-01
2 B 2018-02-06
3 C 2018-02-10
4 D 2018-02-21

[[6]]
# A tibble: 5 x 2
ID2 DATE
<chr> <date>
1 A 2018-02-01
2 B 2018-02-06
3 C 2018-02-10
4 D 2018-02-21
5 E 2018-04-05

关于r - 如何过滤列表列的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53484115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com