【问题标题】:Creating a new column using scores from past years (which is in the same dataframe)使用过去几年的分数创建一个新列(在同一个数据框中)
【发布时间】:2021-07-19 15:07:53
【问题描述】:

如果这个问题已经得到回答,我很抱歉,但我真的不知道如何表达我的问题。

我有一个这样构造的数据框:

country year score
France 2020 10
France 2019 9
Germany 2020 15
Germany 2019 14

我希望有一个名为 previous_year_score 的新列,它将查看数据框,以查找“country”的“分数”为“year - 1”。在这种情况下,法国 2020 的 previous_year_score 为 9,而法国 2019 的 NA

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以为此使用match()。我想还有很多其他的解决方案。

    数据:

    df <- structure(list(country = c("France", "France", "Germany", "Germany"
    ), year = c(2020L, 2019L, 2020L, 2019L), score = c(10L, 9L, 15L, 
    14L), prev_score = c(9L, NA, 14L, NA)), row.names = c(NA, -4L
    ), class = "data.frame")
    

    解决方案:

    i <- match(paste(df[[1]],df[[2]]-1),paste(df[[1]],df[[2]]))
    df$prev_score <- df[i,3]
    

    【讨论】:

      【解决方案2】:

      您可以使用以下解决方案:

      library(dplyr)
      
      df %>%
        group_by(country) %>%
        arrange(year) %>%
        mutate(prev_val = ifelse(year - lag(year) == 1, lag(score), NA))
      
      # A tibble: 4 x 4
      # Groups:   country [2]
        country  year score prev_val
        <chr>   <int> <int>    <int>
      1 France   2019     9       NA
      2 Germany  2019    14       NA
      3 France   2020    10        9
      4 Germany  2020    15       14
      

      【讨论】:

        【解决方案3】:

        使用case_when

        library(dplyr)
        df1 %>% 
           arrange(country, year) %>%
            group_by(country) %>% 
            mutate(prev_val = case_when(year - lag(year) == 1 ~ lag(score)))
        # A tibble: 4 x 4
        # Groups:   country [2]
          country  year score prev_val
          <chr>   <int> <int>    <int>
        1 France   2019     9       NA
        2 France   2020    10        9
        3 Germany  2019    14       NA
        4 Germany  2020    15       14
        

        【讨论】:

          猜你喜欢
          • 2020-06-15
          • 1970-01-01
          • 1970-01-01
          • 2019-01-13
          • 1970-01-01
          • 2019-08-12
          • 1970-01-01
          • 1970-01-01
          • 2015-03-28
          相关资源
          最近更新 更多