Как совместить циклы с 2+ переменными? - PullRequest
0 голосов
/ 25 марта 2019

У меня есть несколько циклов for, которые извлекают даты из одного фрейма данных и сопоставляют их с конкретными строками / столбцами в другом фрейме данных. Я ищу помощь, превращая это в одну функцию или цикл.

Я пытался вложить в петли без удачи.

Циклы, которые у меня есть, выглядят так и делают то, что мне нужно:

for(x in id_vector) {
  datafileslist[[x]]$m3start <- rep(dates_df[[x,3]], nrow(datafileslist[[x]]))
}

for(x in id_vector) {
  datafileslist[[x]]$m3end <- rep(dates_df[[x,4]], nrow(datafileslist[[x]]))
}

for(x in id_vector) {
  datafileslist[[x]]$m6start <- rep(dates_df[[x,5]], nrow(datafileslist[[x]]))
}

... и так далее. Хотя это работает, много повторений (у меня 16 для циклов).

Я пробовал это вместо:

for(x in seq_along(id_vector)) {
  for(z in 3:18) {
    for(y in 20:35) {
  datafileslist[[x]][[y]] <- rep(dates_df[[x,z]], nrow(datafileslist[[x]]))
    }
  }
}

Но мне нужно, чтобы совпадающие пары z и y проходили один раз в тандеме (3, 20; 4, 21; ... 18, 35) через каждый идентификатор, чего не делает приведенный выше код. Любые идеи о том, как я могу это сделать?

date_df выглядит так:

id          m3start           m3end
s01         2016-09-19        2016-12-17
s02         2016-11-03        2017-01-31

Существует 60 идентификаторов и 16 комбинаций дат начала / окончания (м3, м6, м9 и т. Д.).

Список файлов данных представляет собой список фреймов данных, один фрейм данных на идентификатор, с более чем 50 000 наблюдений около 20 переменных для каждого идентификатора. Я пытаюсь добавить столбцы с начальной и конечной датами для каждого диапазона дат от фрейма данных date_df до фрейма данных для каждого идентификатора.

Вывод должен выглядеть примерно так:

id          group          m3start          m3end          m6start
s01         int            2016-09-19       2016-12-17     2018-09-08
s01         int            2016-09-19       2016-12-17     2018-09-08
s01         int            2016-09-19       2016-12-17     2018-09-08

Когда я запускаю вложенные циклы for, я получаю одинаковые даты для m3start, m3end, m6start, m6end и т. Д.

id          group          m3start          m3end          m6start
s01         int            2020-01-12       2020-01-12     2020-01-12
s01         int            2020-01-12       2020-01-12     2020-01-12
s01         int            2020-01-12       2020-01-12     2020-01-12

1 Ответ

1 голос
/ 25 марта 2019

Рассмотрим merge внутри lapply в списке фреймов данных:

new_datafileslist <- lapply(datafileslist, function(df) merge(df, dates_df, by="id"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...