使用 dplyr 的子集嵌套数据框

Chr*_*fer 5 r dplyr

我想用 ? 对嵌套数据框的内部数据框进行子集化dplyr

我有以下嵌套数据框:

library(dplyr)

# Initialise nested data frame
d <- tibble(group = c("A", "B"),
            data = rep(list(NA), 2))

set.seed(1)
d$data[[1]] <- data.frame(x = seq(1:10),
                          y = rnorm(10))
d$data[[2]] <- data.frame(x = seq(1:15),
                          y = rnorm(15),
                          z = runif(15))
Run Code Online (Sandbox Code Playgroud)

假设我只想要group == "A"where数据框中的行y >= 0,而 for 数据框group == B保持不变。编辑: 操作后两个结果数据框应具有相同的变量。

我正在考虑做类似下面一行的事情,但与 mutate 命令结合使用,但filter(y >= 0)在这里不起作用。那么,我应该怎么做呢?

d %>% filter(group == "A") %>% select(data) %>% filter(y >= 0)
Run Code Online (Sandbox Code Playgroud)

akr*_*run 4

我们可以通过filter在里面做 ing来做到map2

\n\n
library(tidyverse)\nd %>%\n    mutate(data = map2(group, data, ~\n                                .y %>% \n                                     filter(!(.x == "A" &  y < 0))))\n # A tibble: 2 x 2\n #  group data                 \n #  <chr> <list>               \n #1 A     <data.frame [6 \xc3\x97 2]> \n #2 B     <data.frame [15 \xc3\x97 3]>\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用反向比较,则为

\n\n
out <- d %>%\n         mutate(data = map2(group, data, ~\n                         .y %>%\n                           filter((.x == "A" & y >=0)|.x != "A")))\nout\n# A tibble: 2 x 2 \n#  group data                 \n#  <chr> <list>               \n#1 A     <data.frame [6 \xc3\x97 2]> \n#2 B     <data.frame [15 \xc3\x97 3]>\n\nmap(d$data, dim)\n#[[1]]\n#[1] 10  2\n\n#[[2]]\n#[1] 15  3\n\nmap(out$data, dim)\n#[[1]]\n#[1] 6 2\n\n#[[2]]\n#[1] 15  3\n
Run Code Online (Sandbox Code Playgroud)\n