【发布时间】:2019-02-10 01:42:38
【问题描述】:
我有一个包含列表列的数据框。我想在其包含的列unit 上过滤此(嵌套)列表列(data,包含数据框),并使用另一个列表(x)中包含的值。我想我已经很接近了,问题是我没有成功将列表x“转换”为过滤器语句的向量。任何提示都很棒!
library(tidyverse)
数据框:
df<- structure(list(data = list(structure(list(unit = c("A1", "A2"
), value = c("10", "10")), class = c("tbl_df", "tbl", "data.frame"
), .Names = c("unit", "value"), row.names = c(NA, -2L)), structure(list(
unit = c("B1", "B2", "A1"), value = c("10", "10", "10")), class = c("tbl_df",
"tbl", "data.frame"), .Names = c("unit", "value"), row.names = c(NA,
-3L)), structure(list(unit = c("C1", "B2"), value = c("10", "10"
)), class = c("tbl_df", "tbl", "data.frame"), .Names = c("unit",
"value"), row.names = c(NA, -2L))), x = list(c("A1", "A2"), c("B1",
"B2"), "C1")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-3L), .Names = c("data", "x"))
这仅适用于x 只有一个元素:
df1 <- df %>%
mutate(y=map(data, ~filter(., unit %in% x)))
flatten_chr 创建一个向量,包括所有 (!) 行的 x 中包含的值,而不是每行的列表。
df1 <- df %>%
mutate(y=map(data, ~filter(., unit %in% flatten_chr(x))))
关键问题似乎是如何将x 转换为每行的向量。
【问题讨论】: