Учитывая data.frame и набор столбцов, я хотел бы написать CSV-файл (или текстовый файл в целом) для каждого столбца, содержащий, но содержащий информацию для всех столбцов, однако строки фильтруются на основе соответствующего столбца.
Например, скажем, я хочу сохранить файл для каждого, Sepal.Width и Sepal.Length , содержащий top 5 строк для каждого соответственно:
top_n(iris, 5, Sepal.Width)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.4 3.9 1.7 0.4 setosa
# 2 5.8 4.0 1.2 0.2 setosa
# 3 5.7 4.4 1.5 0.4 setosa
# 4 5.4 3.9 1.3 0.4 setosa
# 5 5.2 4.1 1.5 0.1 setosa
# 6 5.5 4.2 1.4 0.2 setosa
# this should go in top5_Sepal.Width.csv
top_n(iris, 5, Sepal.Length)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 7.7 3.8 6.7 2.2 virginica
# 2 7.7 2.6 6.9 2.3 virginica
# 3 7.7 2.8 6.7 2.0 virginica
# 4 7.9 3.8 6.4 2.0 virginica
# 5 7.7 3.0 6.1 2.3 virginica
# this should go in top5_Sepal.Length.csv
Я пробовал что-то подобное ниже, однако я не знаю, чтобы написать функцию mywrite
, то есть как получить доступ ко всему data.frame для фильтрации (только .x
) содержит столбец)
myvars <- c("Sepal.Width", "Sepal.Length")
tmp <- iris %>%
map_at(myvars, ~mywrite(.x))
В качестве альтернативы, purrr:map2
позволяет отслеживать имена, но не входит в _at
(я думаю, фильтрация может быть сделана в mywrite
тогда .. Однако, опять нет доступа ко всему ирису data.frame:
tmp <- iris %>%
map2(., colnames(iris), ~mywrite(.x, .y))
В качестве третьего варианта, я думаю, есть опция l oop над именами столбцов, возможно, с использованием аккуратной оценки, то есть mycol <- sym(myvars[i])
и !!mycol
, но в идеале хотел воздержаться от циклов for.
Обратите внимание, это несколько глупый игрушечный пример, который служит только для иллюстрации проблемы.
Note2, этот ответ аналогичен, но основан на группах внутри столбца, а не отдельных столбцах: