应用多个参数

时间:2011-11-11 04:32:40

标签: r dataframe apply

我有一个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 :(得分:0)

事实上,lapply和家庭的高级用法有点复杂。不得不一次或两次问类似的问题......

HTH: Using lapply with changing arguments

Running lagged regressions with lapply and two arguments

特别喜欢expand.grid