我有类似df3的数据。要重现数据,请运行以下命令:

vec1 <- c("A", "B")
vec2 <- c("A", "B", "C")

df1 <- tibble::tribble(
          ~A, ~B,
          "X", 4L,
          "X", 9L,
          "Y", 5L,
          "Y", 2L,
          "Y", 8L,
          "Y", 2L) %>%
  group_by(A) %>%
  nest()

df2 <- tibble::tribble(
  ~A, ~C,
  "X", vec1,
  "Y", vec2)

df3 <- df1 %>% left_join(df2, by = "A")

我需要使用以下方法过滤嵌套数据:
df4 <- df3 %>% filter(when C==vec1, B (part of nested data now) < 5
                      when C==vec2, B (part of nested data now) >4)

或可能是这样的:
df4 <- df3 %>% map(.$data, ~filter((identicle(.$C, vec1) & B < 5) |
                                  identical(.$C, vec2) & B >4))

我只有df3,我想要df4。我应该如何使用purrr进行上述过滤,以获得以下所需的df4输出。
df11 <- tibble::tribble(
  ~A, ~B,
  "X", 4L,
  "Y", 5L,
  "Y", 8L) %>%
  group_by(A) %>%
  nest()

df4 <- df11 %>% left_join(df2, by = "A")

最佳答案

这是一个使用map2identical进行条件检查的选项:

df3 %>%
    mutate(
        data = map2(
            data, C, ~ if(identical(.y, vec1)) filter(.x, B < 5) else filter(.x, B > 4)
        )
    ) %>%
    identical(df4)
# [1] TRUE

关于r - Purrr根据包含字符向量的未嵌套变量过滤嵌套数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50124514/

10-12 17:31
查看更多