我对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)
非常感谢任何帮助我指明正确方向的帮助。
答案 0 :(得分:1)
您应该从mutate
包中找到lag
和dplyr
。
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列的名称,并且滞后于函数:原始列的名称和滞后的长度。
最好,
科林