Я воссоздал свою проблему, используя набор данных diamonds из ggplot2 в R.
Я хотел бы создать список (my_list
), где каждый элемент в этом списке - это diamond
фрейм данных, который имеет был отфильтрован по заданным c критериям, изложенным в таблице (analys
).
Так, например:
my_list[[1]]
будет иметь кадр данных diamonds
, но только включая алмазы, где colour
равно E
или J
. my_list[[2]]
будет иметь фрейм данных diamonds
, но только с бриллиантами, где clarity
равен SI2
или VS1
. my_list[[3]]
будет иметь кадр данных diamonds
, но только с бриллиантами, где cut
равен Good
или Very Good
.
library(ggplot2)
diamonds = as.data.frame(diamonds)
# create a tibble with the list of filters I want
# eg, row 1 would mean I want only diamonds that have either the colour E or J.
analys <- tribble(
~column, ~trt, ~ctrl, ~translation,
"color", "E", "J", "E vs J",
"clarity", "SI2", "VS1", "SI1 vs VS1",
"cut", "Good", "Very Good", "Good vs Very Good")
# next create an empty list to populate
my_list = list()
# now create a function to filter diamonds dataframe, keeping only the entries where,
# for example the colour would be E or J (specified in the analys tibble).
my_list <- apply(analys, 1, function(x) subset(
diamonds,
x[["column"]] %in% c(x[["trt"]], x[["ctrl"]])
)
)
Однако указанная выше функция не работает при использовании x [["column"]]. Может кто-нибудь исправить эту функцию, чтобы она работала?