Home Forum Statistica con R Valori consecutivi

This topic contains 2 replies and has 3 voices.

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #5500

    sarovasta7
    Participant

    Ciao,

    ho un dataframe:

    a, b
    48, 1000
    48, 1200
    48, 1300
    48, 1400
    2, 1500
    2, 1600
    3, 1700
    1, 1800
    1, 1900
    4, 2000
    5, 2100

    Vorrei un codice che mi riconosca i valori consecutivi uguali di ” a” e che quindi sottragga i corrispettivi valori di “b”.
    Nel caso specifico, il risultato dovrebbe essere:
    `
    a, b, c, d
    48, 1000, 0, 0
    48, 1200, 0, 0
    48, 1300, 0, 0
    48, 1400, 1, 400
    2, 1500, 0, 0
    2, 1600, 1, 100
    3, 1700, 0, 0
    1, 1800, 0, 0
    1, 1900, 1, 100
    4, 2000, 0, 0
    5, 2100, 0, 0

    
    

    Qualsiasi aiuto è ben accetto, grazie!

    • This topic was modified 6 months, 2 weeks ago by  sarovasta7.
    #5502

    Ciao sarovasta7,
    questa potrebbe essere una soluzione, per quanto criptica (e sicuramente pensabile in meno passaggi)…

    
    library(magrittr)
    library(dplyr)
    
    a = c(48, 48, 48, 48, 2, 2, 3, 1, 1, 4, 5) 
    b = c(1000, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100)
    df <- data.frame(a,b)
    
    df %<>% group_by(a) %>%
      mutate(c = c(rep(0, length(a)-1), 1)) %>%
      mutate(d = b[length(b)]-b[1]) %>%
      mutate(d = ifelse(c==0, 0, d)) %>%
      mutate(c = ifelse(d==0, 0, c))
    df
    
    # A tibble: 11 x 4
    # Groups:   a [6]
           a     b     c     d
       <dbl> <dbl> <dbl> <dbl>
     1 48.0   1000  0        0
     2 48.0   1200  0        0
     3 48.0   1300  0        0
     4 48.0   1400  1.00   400
     5  2.00  1500  0        0
     6  2.00  1600  1.00   100
     7  3.00  1700  0        0
     8  1.00  1800  0        0
     9  1.00  1900  1.00   100
    10  4.00  2000  0        0
    11  5.00  2100  0        0
    
    #5503
    Davide Massidda
    Davide Massidda
    Moderator

    Ma i valori di ‘a’, possono anche ripresentarsi dopo una sequenza? Per es., il valore a=48 che compariva nelle prime righe, poi a un certo punto potrebbe ripresentarsi?

Viewing 3 posts - 1 through 3 (of 3 total)

You must be logged in to reply to this topic.