AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 76969378
Accepted
Quinten
Quinten
Asked: 2023-08-24 20:42:52 +0800 CST2023-08-24 20:42:52 +0800 CST 2023-08-24 20:42:52 +0800 CST

Obtenha o próximo valor por grupo com base no próximo valor do grupo ordenado em R

  • 772

Gostaria de encontrar o próximo valor por grupo com base no próximo número ordenado. No exemplo reproduzível a seguir no grupo 2, temos duas vezes o subgrupo 1, o que significa que para ambos os valores o próximo valor deve ser do subgrupo 2, que é 4. Aqui estão alguns dados reproduzíveis (df abaixo) dput:

> df
   group subgroup value
1      1        1     9
2      1        2     8
3      1        3     7
4      2        1     8
5      2        1     6
6      2        2     4
7      2        3     2
8      3        1     2
9      3        1     3
10     3        2     7
11     3        3     9 

Se tentarmos usá-lo com o próximo número de linha, obteremos, é claro, o valor errado como este:

library(dplyr)

df %>%
  group_by(group) %>%
  mutate(next_value = value[row_number()+1])
#> # A tibble: 11 × 4
#> # Groups:   group [3]
#>    group subgroup value next_value
#>    <dbl>    <dbl> <dbl>      <dbl>
#>  1     1        1     9          8
#>  2     1        2     8          7
#>  3     1        3     7         NA
#>  4     2        1     8          6
#>  5     2        1     6          4
#>  6     2        2     4          2
#>  7     2        3     2         NA
#>  8     3        1     2          3
#>  9     3        1     3          7
#> 10     3        2     7          9
#> 11     3        3     9         NA

Minha saída desejada deve ficar assim:

   group subgroup value next_value
1      1        1     9          8
2      1        2     8          7
3      1        3     7         NA
4      2        1     8          4
5      2        1     6          4
6      2        2     4          2
7      2        3     2         NA
8      3        1     2          7
9      3        1     3          7
10     3        2     7          9
11     3        3     9         NA

Criado em 24/08/2023 com reprex v2.0.2

Então, eu queria saber se alguém sabe como obter o próximo valor ordenado por grupo usando R?


dputde df:

df <- structure(list(group = c(1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3), subgroup = c(1, 
2, 3, 1, 1, 2, 3, 1, 1, 2, 3), value = c(9, 8, 7, 8, 6, 4, 2, 
2, 3, 7, 9)), class = "data.frame", row.names = c(NA, -11L))
  • 2 2 respostas
  • 18 Views

2 respostas

  • Voted
  1. Best Answer
    Ritchie Sacramento
    2023-08-24T20:50:18+08:002023-08-24T20:50:18+08:00

    Supondo que os subgrupos estejam em ordem e contínuos a partir de 1:n, você pode fazer:

    library(dplyr)
    
    df |>
      mutate(next_value = value[match(subgroup, subgroup - 1)], .by = group)
    
         group subgroup value next_value
    1      1        1     9          8
    2      1        2     8          7
    3      1        3     7         NA
    4      2        1     8          4
    5      2        1     6          4
    6      2        2     4          2
    7      2        3     2         NA
    8      3        1     2          7
    9      3        1     3          7
    10     3        2     7          9
    11     3        3     9         NA
    

    Se eles estiverem em ordem, mas não forem contínuos ou forem um fator ou caráter, você poderá fazer:

    df |>
      mutate(tmp = match(subgroup, unique(subgroup)),
             next_value = value[match(tmp, tmp - 1)],
             tmp = NULL, .by = group)
    
    • 2
  2. 2023-08-24T21:44:22+08:002023-08-24T21:44:22+08:00

    Passos:

    1. Transforme a coluna de valor em listas
    2. Encontre o primeiro valor na lista de valores da próxima linha
    3. Desaninhe todas as listas novamente
    library("tidyverse")
    
    df |> 
      summarise(value = list(value), .by = c(group, subgroup)) |>
      mutate(n = map(lead(value), ~ .x[[1]]), .by = group) |>
      unnest(c(value, n))
    
    • 1

relate perguntas

  • Adicionar número de série para atividade de cópia ao blob

  • A fonte dinâmica do empacotador duplica artefatos

  • Selecione linhas por grupo com 1s consecutivos

  • Lista de chamada de API de gráfico subscritoSkus estados Privilégios insuficientes enquanto os privilégios são concedidos

  • Função para criar DFs separados com base no valor da coluna

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    destaque o código em HTML usando <font color="#xxx">

    • 2 respostas
  • Marko Smith

    Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}?

    • 1 respostas
  • Marko Smith

    Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)?

    • 2 respostas
  • Marko Smith

    Por que as compreensões de lista criam uma função internamente?

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 respostas
  • Marko Smith

    Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)?

    • 4 respostas
  • Marko Smith

    Por que o construtor de uma variável global não é chamado em uma biblioteca?

    • 1 respostas
  • Marko Smith

    Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto?

    • 1 respostas
  • Marko Smith

    Somente operações bit a bit para std::byte em C++ 17?

    • 1 respostas
  • Martin Hope
    fbrereto Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi Por que as compreensões de lista criam uma função internamente? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A formato fmt %H:%M:%S sem decimais 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python std::views::filter do C++20 não filtrando a visualização corretamente 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa Por que o construtor de uma variável global não é chamado em uma biblioteca? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev Por que os compiladores perdem a vetorização aqui? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan Somente operações bit a bit para std::byte em C++ 17? 2023-08-17 17:13:58 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve