现在符合R中条件的行中的列

时间:2017-07-12 11:12:50

标签: r dataframe data-manipulation

我对R来说相当新,我正在努力在我的问题上取得很大进展。我的R数据框的简化版本如下:

id year num_inst 
1  1995 4  
1  1996 3
1  1996 3
2  1995 1
2  1997 2 
2  1998 2
3  2005 4
4  1998 1
4  1999 7
...

我要做的是为标记为num_inst_prior的每一行添加一个新的列值,该行取决于满足特定条件的给定行。我所追求的是以下内容:

id year num_inst num_inst_prior 
1  1995 4        NA
1  1996 3        4
1  1996 3        4
2  1995 1        NA
2  1997 2        NA
2  1998 2        2
3  2005 4        NA
4  1998 1        NA
4  1999 7        1
...

那就是我想要一个列来表示前一年给定id的实例数(num_inst),即当year = 1996且id = 1时,前一年的实例数是多少(num_inst_prior = 4; 1995年)。

我试图添加一个新列

> df$prior_year <- df$year - 1 

并考虑使用哪个函数作为第一步,但似乎只是按行操作。这样我就陷入了第一关,没有'whiches'。

> which(df$year == df$prior_year & df$id == df$id)
integer(0)

非常感谢任何帮助我指明正确方向的帮助。

1 个答案:

答案 0 :(得分:1)

您应该从mutate包中找到lagdplyr

library(dplyr)
df <- data.frame(id = 1:5,
           year = 1991:1995, 
           prior = 5:9)

  id year prior
1  1 1991     5
2  2 1992     6
3  3 1993     7
4  4 1994     8
5  5 1995     9

df %>% 
  mutate(prior_n1 = lag(prior, 1))

  id year prior prior_n1
1  1 1991     5       NA
2  2 1992     6        5
3  3 1993     7        6
4  4 1994     8        7
5  5 1995     9        8

这里,prior_n1是ouptut in列的名称,并且滞后于函数:原始列的名称和滞后的长度。

最好,

科林