R面板内的条件值赋值

R面板内的条件值赋值,r,tidyr,panel-data,R,Tidyr,Panel Data,假设我有如下排列的面板数据: | ID | Year | Var1 | |----|------|------| |----|------|------| | 1 | 2010 | 0 | | 1 | 2012 | 1 | -------------------- | 2 | 2010 | 3 | | 2 | 2012 | 2 | -------------------- | 3 | 2010 | 1 | | 3 | 2012 | 3 | 或者,

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

| ID | Year | Var1 |
|----|------|------|
|----|------|------|
| 1  | 2010 |  0   |
| 1  | 2012 |  1   |
--------------------
| 2  | 2010 |  3   |
| 2  | 2012 |  2   |
--------------------
| 3  | 2010 |  1   |
| 3  | 2012 |  3   |
或者,在R中:


ID您可以使用
diff

tidyverse
中,使用
groupby

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.

要明确的是,如果使用tidyverse和Year尚未按时间顺序排列,您还需要在group_by()和mutate()之间添加arrange(Year)%>%,对吗?效果非常好。非常感谢。
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.
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