【问题标题】:R: creating new variable with conditions using dplyrR:使用 dplyr 创建具有条件的新变量
【发布时间】:2025-12-02 09:55:01
【问题描述】:

您好,我正在尝试使用 dplyr 创建一个新变量。 我的数据如下所示:

                Land     happy      year
               <fctr>    <int>     <dbl>
           1  Country1    09       2002
           2  Country1    08       2012
           3  Country3    05       2008
           ...

要创建一个具有每个土地和年份的快乐平均值的变量,我使用了以下代码:

New <-df %>%
      group_by(Land, year) %>%
      mutate(mean.happy = mean(happy, na.rm=T))

现在我想用这个内容创建一个变量: (2012 年幸福的平均值)-(2008 年的幸福平均值)。

如何在这些条件下构建新变量?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这是一个 dplyr/tidyr 解决方案。

    library(dplyr)
    library(tidyr)
    
    df <- df %>%
           group_by(Land, year) %>%
           mutate(mean.happy = mean(happy, na.rm=T)) %>%
           spread(year, mean.happy)
    

    【讨论】:

      【解决方案2】:

      这是一个 data.table 解决方案。它通常更快

      library(data.table)
      
      dt = read.table("clipboard", header = TRUE)
      setDT(dt)
      
      dt[ , "mean.happy" := mean(happy), by = .(Land, year)]
      
      dt[ , "diff.happiness" := mean(happy[year == 2012]) - mean(happy[year == 2008])]
      
      > dt
             Land happy year mean.happy diff.happiness
      1: Country1     9 2002          9              3
      2: Country1     8 2012          8              3
      3: Country3     5 2008          5              3
      

      【讨论】: