【问题标题】:Function not returning max value for each row but overall函数不返回每行的最大值,而是返回整体
【发布时间】:2019-01-16 18:59:45
【问题描述】:

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

我尝试仅过滤与 a 输入匹配的 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

有人可以帮忙吗? 谢谢

【问题讨论】:

  • 你期望的输出df是多少?
  • 对不起。我简化了我的问题。

标签: r


【解决方案1】:

使用 -

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 sn-p 到 group_byid 值并获取每个组的最大 y 的所有行

【讨论】:

    猜你喜欢
    • 2014-08-25
    • 2018-03-08
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多