Функция не возвращает максимальное значение для каждой строки, но в целом - PullRequest
0 голосов
/ 16 января 2019

Я написал функцию для выполнения 2 вложенных циклов для вычисления максимально возможного вычисляемого значения для каждой строки. Для каждой строки я добавляю x в функцию. Однако функция затем возвращает одинаковое значение для каждой строки.

Я попытался отфильтровать только те идентификаторы, которые соответствуют входным данным, однако, похоже, что это не работает.

        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 голосов
/ 16 января 2019

Использование -

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 для каждой группы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...