Применить с несколькими аргументами - PullRequest
0 голосов
/ 11 ноября 2011

У меня есть data.frame записей.У меня также есть data.frame для каждой недели, с которым связано количество записей.Нет такого количества недель, в data.frame есть все записи, поэтому исходный список является надмножеством для каждого из них.

Что я хотел бы сделать, так это объединить их так, чтобы у меня был data.frame, где первый столбец - это запись, а следующие N столбцов - это число N недель, если запись не имеет счетчика.на эту неделю он считается 0.

Моя первая попытка выглядела так:

append_week_counts_to_entries <- function(entries) {
  entries$week1 <- apply(entries,1,helpfunc,row=row,week=count_week1)
  entries$week2 <- apply(entries,1,helpfunc,row=row,week=count_week2)
# ... to all N weeks
  return(entries)
}

helpfunc <- function(entries,row,week) {
  if(as.character(row[1]) %in% week$id) {
    return(week[which(as.character(week$id) == as.character(row[1])),2])
  }
  else {
    return(0)
  }
}

(Это работало до тех пор, пока я не абстрагировал его до того, как оно выглядит сейчас. Я бы лучше научилсякак это могло бы работать, чем сохранить плохой способ написания, который у меня был раньше)

Помимо того, что я не работаю как есть, у меня также есть ощущение, что это очень неэффективно для R. Помощь на обоих фронтах будет высоко цениться.

Редактировать: Пример набора данных:

entries: structure(list(`entries$id` = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10
)), .Names = "entries$id", row.names = c(NA, -10L), class = "data.frame")

count_week_i: structure(list(Var1 = structure(1:3, .Label = c("1", "2", "3"
), class = "factor"), Freq = c(1L, 2L, 4L)), .Names = c("Var1", 
"Freq"), row.names = c(NA, -3L), class = "data.frame")

1 Ответ

0 голосов
/ 11 ноября 2011

Действительно, расширенное использование lapply и семейства несколько сложное.Приходилось задавать один и тот же вопрос один или два раза ...

HTH: Использование lapply с изменением аргументов

и

Запуск с задержкойрегрессии с радостью и двумя аргументами

Особенно понравился expand.grid

...