函数不返回每一行的最大值,而是整体

时间:2019-01-16 09:59:31

标签: r

我编写了一个函数,该函数执行2个嵌套的for循环,以计算每行可能的最高计算值。对于每一行,我将x输入到函数中。但是,该函数然后为每一行返回相同的值。

我尝试仅过滤与输入匹配的ID,但是,它似乎不起作用。

        dd <- data.frame(x=c(3,4,5),id=c('A','B','C'))
  foo  <- function(x,a){
    df <- data.frame(
      "id" = character()
      ,"y" = numeric()
    )

      for(i in 1:2)
      {
        for(j in 1:2)
        {
          y<-x+i+j 
          df<- rbind(df, data.frame(
            "id" = a
            ,"y" = y
          )
          )

        }
      }
     # I tried this filtering but it still shows max calculated value from all 3 rows
     result<-df%>% 
      filter(id==a)%>%
      arrange(desc(y))%>%
      head(1)
     return(result$y)
  }

  dd%>% mutate(t=foo(dd$x, dd$id))

我期望的结果是返回每个循环的第一行y值的函数。

预期结果是。

        x    id     t
  1     3    A     7
  2     4    B     8
  3     5    C     9

但是我得到了

        x    id     t
  1     3    A     9
  2     4    B     9
  3     5    C     9

有人可以帮忙吗? 谢谢

1 个答案:

答案 0 :(得分:0)

使用-

dd <- data.frame(x=c(3,4,5),id=c('A','B','C'))
foo  <- function(x,a){
  df <- data.frame(
    "id" = character()
    ,"y" = numeric()
  )

  for(i in 1:2)
  {
    for(j in 1:2)
    {
      y<-x+i+j 
      df<- rbind(df, data.frame(
        "id" = a
        ,"y" = y
      )
      )

    }

  }

  # Replace with group_by, filter, max
  result<-df%>% 
    group_by(id)%>%
    filter(y == max(y))
  return(result$y)
}

dd%>% mutate(t=foo(dd$x, dd$id))

输出

  x id t
1 3  A 7
2 4  B 8
3 5  C 9

说明

您只需要照顾到result值的group_by的最后一个id片段,并获取每个组的最大y的所有行