Я начинаю работать с более крупными наборами данных, и мне нужен способ автоматизации функций, которые я уже использую. Рамка, которую я надеюсь достичь, применит цикл в dplyr select(), чтобы идентифицировать группы управления и соответствующие экспериментальные группы в большом кадре данных, затем выполнить функцию (ы), сохранить вывод и, наконец, повторить цикл для все образцы в наборе данных.написать цикл в dplyr select()
Данные сложны в том, что я часто работаю с наборами данных, которые содержат более 3000 образцов, поэтому отбор каждого образца в заголовках столбцов приведет к поражению эффективности использования компьютерной программы.
Макет данных на самом деле прост. Каждая контрольная группа обозначается как «контроль», каждая экспериментальная группа обозначается как «эксперимент». Чтобы связать каждый элемент управления с его экспериментальной группой, я добавил числовую составляющую, так что control1 будет соответствовать экспериментам1, control2 и exper2 и т. Д. Наконец, многие экспериментальные группы соответствуют одному и тому же элементу управления, поэтому я добавил алфавитный компонент: exper1a и exper1b оба соответствуют контролю1.
Вот пример заголовка таблицы:
переменная control1 control1 exper1a exper1a exper1b exper1b
EDIT ### см воспроизводимых данных, предоставленных Пьером в зарегистрированном ответ ### Извините за не предоставляя мои собственные данные.
Я бы хотел, чтобы код искал первое целое число «управление», а затем нашел соответствующий эксперимент с одним и тем же целым числом. В группе эприральных групп, которые соответствуют управлению1, я хотел бы идентифицировать первую группу alapbetic и сохранить итоговую таблицу. Например:
переменная control1 control1 exper1a exper1a
Далее, я хотел бы код, чтобы повторить эту функцию для всех других пар EXPER goups с Control1 (т.е. exper1b), и когда все EXPER группы были исчерпаны для управления1, перейдите на элемент управления2 .. и повторите это, пока не останется больше групп контроля.
В принципе, я просто хочу кучу небольших столов, сделанных из одного большого стола.
Вот что я кусочкам до сих пор, что работает:
library(readr)
library(dplyr)
df<-read.csv("big_table.csv")
Я знаю, что это жалкая, но это лучше, чем листинг 100+ неудачных попыток я пытался. вот теоретические основы я представлял себе работать:
# define i as a list of integers without a limit
# define n as a list alpahbetical characters, start at a, stop at z
for(i in 1:ncol(x)) {
select(df, variable, contains(i))
for(n in a:ncol(x)){
selcect(df, variable, contains(n))
write.csv("controli_experin.csv")
# where i in controli is the variable "i", and "in" represents the variables "i" and "n" in experin.
}}
Надеюсь, это дает каждому представление о том, что я пытаюсь сделать. В идеале я смогу применить этот код к большим и небольшим наборам данных, если номенклатура столбцов следует той же схеме.
Заранее благодарю вас за помощь.
Это плохая практика, чтобы назвать два столбца одинаково, например 'переменное управление1 control1 exper1 exper1'. Если вы вызываете 'df [," control1 "]', как бы вы (или процессор) знали, какой столбец следует ожидать? –
Пара комментариев: (1), так как у нас нет вашего CSV, показывая нам, что код, который вы используете для его чтения, довольно бессмысленен (тем более, что ваш вопрос не имеет никакого отношения к чтению данных. Скорее, вы должны попробовать сделайте свой вопрос [воспроизводимым] (http://stackoverflow.com/q/5963269/903061), в этом случае самый простой способ - это, вероятно, предоставить код для имитации данных. (2) Возможно, вы захотите прочитать [подробные данные ] (http://vita.had.co.nz/papers/tidy-data.pdf), у вас, кажется, есть «группы» столбцов, которые, вероятно, будут иметь более длинную форму, чем их текущая широкая форма. – Gregor
И (3) если вы настаиваете на использовании переменных столбцов, а не на преобразовании в длинную форму и просто используете 'group_by', есть [очень красиво виньетировано на стандартной и нестандартной оценке в dplyr] (https://cran.r-project.org /web/packages/dplyr/vignettes/nse.html), который должен быть вашей отправной точкой. – Gregor