面板内的R条件值分配

时间:2018-08-03 03:14:12

标签: 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   |

或者,在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。

在示例表中,当每个ID的2012年Var1大于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方法。

1 个答案:

答案 0 :(得分:1)

您可以使用<h2>Test upload ref save in firestore</h2> <form #f="ngForm" [formGroup]="forma" (ngSubmit)="crearTest()" novalidate> <input type="file" (change)="uploadFile($event)" /> <br> <br> <div>{{ uploadPercent | async }}</div> <br> <a [href]="downloadURL | async">{{ downloadURL | async }}</a> <br> <input type="text" formControlName="imagenDestacada" [value]="downloadURL | async" placeholder="url Image"> <br> <br> <!-- <button type="submit" [disabled]="!forma.valid">Crear Test</button> --> </form> <hr> <ul> <li *ngFor="let test of tests | async">Imagen: {{test.imagenDestacada}}</li> </ul>

difftidyverse

group_by

或者在基数R中使用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.

ave