使用自定义函数与ddply

时间:2018-03-13 15:45:18

标签: r function dplyr

出于某种原因,我无法使用ddply的自定义函数。它返回完全相同的数据帧。

基本上,我不想计算id的重复数量,但实际上创建了一个变量,表明它是id重复的第一个,第二个还是第三个实例。为此创建了一个函数create_guide,它起作用;但不适用于id组。

df<-data.frame(id=c(1,1,2,2,3,4))

create_guide <- function(dt) {

  guide <- rep(0,times=nrow(dt))

  for (i in 1:nrow(dt)) {
    guide[i] <- length(dt[1:i,1])
  }

  a <- cbind(guide,dt)

}

bi <- plyr::ddply(df,.(id),fun=create_guide)

发生了什么事? 谢谢

1 个答案:

答案 0 :(得分:1)

你错误拼写了参数名称:它是.fun,而不是fun。你也可以省略它:

bi <- ddply(df, .(id), .fun = create_guide)
# or
bi <- ddply(df, .(id), create_guide)

此外,您的功能可以大大简化,因为您的循环体只是一种分配连续数字的复杂方式:

create_guide = function(dt) {
    cbind(guide = seq_len(nrow(dt)), dt)
}

(顺便说一句,我花了大量时间将功能简化到这一行,因为我无法理解它在做什么 - 这就是代码的复杂程度。)