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