r语言 - 根据按组划分的某些列上某些行的值创建新变量



>我有以下数据框,想根据 Var2、年份和月份的值创建一个新变量 Var3。我的数据是长格式的,因此每个人(ID(都有多行(即每个测量场合一行(。因此,为了创建新变量,我猜数据必须按 ID 分组。

dd <- read.table(text=
"ID    Var1   Year      Month    Var2
1      0      2008      2       -4.17      
1      0      2009      2       -3.17
1      0      2010      2       -2.17
1      0      2011      2       -1.17
1      1      2013      2        0.17
1      0      2014      10       2.84
2      0      2008      2       -3.33      
2      0      2010      2       -1.33
2      1      2011      2        0.33
2      0      2013      2        5.43
2      0      2015      11       6.43
3      1      2010      2        0.85
3      0      2011      2        2.33
3      0      2013      2        4.86
3      0      2015      11       6.33
3      0      2017      10       4.12", header=TRUE) 

应按照特定规则构建新变量:

  1. 如果 Var1 == 1,则 Var3 == Var2
  2. 如果 Var2
  3. 如果 Var2>= 0,则应使用以下过程创建 Var 3:

对于 Var2>= 0 的第一行,取 Var1 == 1 行中的 Var2 值(例如,ID 1 为 0.17(,将以下等式的结果相加:Var1 == 1 下方第一行的年份值(例如,ID 1 为 2014(减去Var1 == 1 的行中的年份值(例如, ID 1 为 2013( 进一步添加此等式的结果:Var1 == 1 下方第一行的月份值(例如,ID 1 为 10(减去Var1 == 1 行中的月份值(例如,ID 1 为 2(除以 12。

对于 Var2>= 0 的第二行,取 Var1 == 1 行中的 Var2 值(例如,ID 2 为0.33(,将以下等式的结果相加:Var1 == 1 下方第二行的年份值(例如,ID 2 为 2015(减去Var1 == 1 行中的年份值(例如,ID 2011 为 2( 进一步添加此等式的结果:Var1 == 1 下方第二行的月份值(例如,ID 2 为 2(减去Var1 == 1行中的月份值(例如,ID 2 为 2(除以 12。

。依此类推,其中 Var2>= 0 等的第三行...

最终数据框应如下所示:

dd_new <- read.table(text=
"ID    Var1   Year      Month    Var2     Var3
1      0      2008      2       -4.17    -4.17       
1      0      2009      2       -3.17    -3.17 
1      0      2010      2       -2.17    -2.17 
1      0      2011      2       -1.17    -1.17 
1      1      2013      2        0.17     0.17 
1      0      2014      10       2.89     1.836667  
2      0      2008      2       -3.33    -3.33           
2      0      2010      2       -1.33    -1.33     
2      1      2011      2        0.33     0.33     
2      0      2013      2        5.43     2.33        
2      0      2015      11       6.43     5.08    
3      1      2010      2        0.67     0.67     
3      0      2011      2        2.33     1.67    
3      0      2013      2        4.86     3.67    
3      0      2015      11       6.33     6.42          
3      0      2017      10       4.12     8.336667", header=TRUE) 

不幸的是,我不知道如何使用特定行下方(即 Var1 == 1 所在的行下方(中的值创建新变量。有人可以帮助我吗?

多谢!

编辑

这是按照更新的特定规则创建Var3的方法

library(dplyr)
dd %>% 
group_by(ID) %>% 
mutate(
Var3 = ifelse(Var1 == 1 | Var2 < 0, Var2, Var2[Var1 == 1] + Year[row_number()] - Year[Var1 == 1] + (Month[row_number()] - Month[Var1 == 1])/12)
)

输出

# A tibble: 16 x 6
# Groups:   ID [3]
ID  Var1  Year Month  Var2  Var3
<int> <int> <int> <int> <dbl> <dbl>
1     1     0  2008     2 -4.17 -4.17
2     1     0  2009     2 -3.17 -3.17
3     1     0  2010     2 -2.17 -2.17
4     1     0  2011     2 -1.17 -1.17
5     1     1  2013     2  0.17  0.17
6     1     0  2014    10  2.89  1.84
7     2     0  2008     2 -3.33 -3.33
8     2     0  2010     2 -1.33 -1.33
9     2     1  2011     2  0.33  0.33
10     2     0  2013     2  5.43  2.33
11     2     0  2015    11  6.43  5.08
12     3     1  2010     2  0.67  0.67
13     3     0  2011     2  2.33  1.67
14     3     0  2013     2  4.86  3.67
15     3     0  2015    11  6.33  6.42
16     3     0  2017    10  4.12  8.34

最新更新