【问题标题】:Ho to do a simple function in R?如何在 R 中做一个简单的函数?
【发布时间】:2021-08-13 17:36:31
【问题描述】:

我有以下df:

        library(tidyverse)
        df <- 
        tibble::tribble(
        ~ city_code, ~ name, ~ score,
        489, "Jonh"  , .45,
        489, "Adam"  , .51,
        128, "Mary"  , .33,
        128, "Matt"  , .29,
        147, "Rob"   , .45,
        147, "Gomez" , .55,
        199, "Thomas", .22,
        199, "Ryan"  , .60
        )

原始 df 有数千行,每个城市有两个名称。对于每个城市,我想从第二个人中减去第一个人的分数,反之亦然。 df 应如下所示:

df <- 
  tibble::tribble(
    ~ city_code, ~ name, ~ score, ~ score_diff,
    489, "Jonh"  , .45 , -.06 ,
    489, "Adam"  , .51 , .06 ,
    128, "Mary"  , .33 , .04 ,
    128, "Matt"  , .29 , -.04 ,
    147, "Rob"   , .45 , -.1 ,
    147, "Gomez" , .55 , .1 ,
    199, "Thomas", .22 , -.38 ,
    199, "Ryan"  , .60 , .38 ,
  )

提前致谢。我也很欣赏任何关于如何在 R 中学习这些函数的提示。

【问题讨论】:

    标签: r function statistics economics


    【解决方案1】:

    如果每个 city_code 恰好有两个名称,则可以正常工作

    library(tidyverse)
    df <- 
      tibble::tribble(
        ~ city_code, ~ name, ~ score,
        489, "Jonh"  , .45,
        489, "Adam"  , .51,
        128, "Mary"  , .33,
        128, "Matt"  , .29,
        147, "Rob"   , .45,
        147, "Gomez" , .55,
        199, "Thomas", .22,
        199, "Ryan"  , .60
      )
    df %>% group_by(city_code) %>%
      mutate(score_diff = score - lag(score, default = last(score)))
    #> # A tibble: 8 x 4
    #> # Groups:   city_code [4]
    #>   city_code name   score score_diff
    #>       <dbl> <chr>  <dbl>      <dbl>
    #> 1       489 Jonh    0.45    -0.06  
    #> 2       489 Adam    0.51     0.06  
    #> 3       128 Mary    0.33     0.0400
    #> 4       128 Matt    0.29    -0.0400
    #> 5       147 Rob     0.45    -0.1   
    #> 6       147 Gomez   0.55     0.1   
    #> 7       199 Thomas  0.22    -0.38  
    #> 8       199 Ryan    0.6      0.38
    

    reprex package (v2.0.0) 于 2021-05-25 创建

    【讨论】:

      猜你喜欢
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多