【发布时间】:2018-10-11 23:10:29
【问题描述】:
我有类似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")
【问题讨论】:
-
我没有关注
B的过滤方式。如果df3$data由嵌套的B列组成,例如,您如何检查B < 5?如果B中的any()值是< 5?如果您可以显示预期的df4结果示例,那将很有帮助。 -
我想过滤嵌套数据框内的 B,其变量名为“数据”,由嵌套自动创建。我已更新问题以反映所需的输出。
-
这不是很有效,但你可以
match列出:match(df3$C, list(vec1,vec2))例如,这会给你一个决定下一步做什么的标志。 -
你能建议以 df4