【问题标题】:R conditional value assignment within panel面板内的R条件值分配
【发布时间】:2019-01-10 21:15:03
【问题描述】:

假设我的面板数据排列如下:

| ID | Year | Var1 |
|----|------|------|
|----|------|------|
| 1  | 2010 |  0   |
| 1  | 2012 |  1   |
--------------------
| 2  | 2010 |  3   |
| 2  | 2012 |  2   |
--------------------
| 3  | 2010 |  1   |
| 3  | 2012 |  3   |

或者,在 R 中:

ID <- c(1, 1, 2, 2, 3, 3)

Year <- c(2010, 2012, 2010, 2012, 2010, 2012)

Var1 <- c(0, 1, 3, 2, 1, 3)

df <- data.frame(ID, Year, Var1)

我现在创建 Var2,当每个面板中第二个时间段的 Var1 大于前一个时间段的 Var1 时,它有条件地分配 1,否则分配 0。

在示例表中,当每个 ID 的 Var1 在 2012 年大于 2010 年的 Var1 时,我会在新创建的 Var2 中分配 1,否则分配 0。

看起来像这样:

| ID | Year | Var1 | Var2 |
|----|------|------|------|
|----|------|------|------|
| 1  | 2010 |  0   |  0   |
| 1  | 2012 |  1   |  1   |
---------------------------
| 2  | 2010 |  3   |  0   |
| 2  | 2012 |  2   |  0   |
---------------------------
| 3  | 2010 |  1   |  0   |
| 3  | 2012 |  3   |  1   |

创建 Var2 的 R 代码是什么样的?我想有一个简单的 tidyverse 方法。

【问题讨论】:

    标签: r tidyr panel-data


    【解决方案1】:

    你可以使用diff:

    在tidyverse 和group_by

    library(tidyverse)
    df %>%
        group_by(ID) %>%
        mutate(Var2 = c(0, +(diff(Var1)) > 0))
    ## A tibble: 6 x 4
    ## Groups:   ID [3]
    #     ID  Year  Var1  Var2
    #  <dbl> <dbl> <dbl> <dbl>
    #1    1. 2010.    0.    0.
    #2    1. 2012.    1.    1.
    #3    2. 2010.    3.    0.
    #4    2. 2012.    2.    0.
    #5    3. 2010.    1.    0.
    #6    3. 2012.    3.    1.
    

    或者在基础 R 中使用 ave

    transform(df, Var2 = ave(Var1, ID, FUN = function(x) c(0, +(diff(x)) > 0)))
    #  ID Year Var1 Var2
    #1  1 2010    0    0
    #2  1 2012    1    1
    #3  2 2010    3    0
    #4  2 2012    2    0
    #5  3 2010    1    0
    #6  3 2012    3    1
    

    【讨论】:

    • 要明确一点,如果使用 tidyverse 和 Year 还没有按时间顺序排列,您还要在 group_by() 和 mutate() 之间添加arrange(Year) %>%,对吗?
    • 工作就像一个魅力。谢谢
    猜你喜欢
    • 2016-08-14
    • 2014-11-18
    • 2014-03-03
    • 2016-06-04
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    相关资源
    最近更新 更多