为什么我的前导功能会生成NA值?

时间:2019-12-02 12:55:42

标签: r lead

我必须构造一个参考表来跟踪学生在当前日期应获得的学分。每个入场和课程我都有一行。

我想编写一个 finished 变量,该变量在每个入学回合中将最后一门课程的值设为1,将其他值设为0(这将使我与应该完成课程的学生打交道)已经)。

我写

ekon_program<-ekon_program%>%mutate(finished=ifelse(lead(kull)=kull,0,1))

其中 kull 是我的入场回合变量,它将直接在当前入场回合的最后一个路线之后的行中以+1更改。奇怪的是,每个入学回合的最后一道课现在被编码为“ NA”,但所有其他值都被编码为0。

我可以通过将所有NA值都转换为1来轻松地纠正此问题,但是为什么会首先发生这种情况?

数据摘录:

ekon_program <- structure(list(sd = structure(c(17042, 17042, 17042, 17042, 17042, 
17042, 17042, 17042, 17042, 17042, 17042, 17042, 17042, 17042, 
17406, 17406, 17406, 17406, 17406, 17406), class = "Date"), points_ekon = c(15, 
15, 15, 15, 7.5, 7.5, 15, 7.5, 7.5, 15, 15, 15, 30, 0, 15, 15, 
15, 15, 7.5, 7.5), summer_break_ekon = c(0, 0, 0, 0, 1, 1, 1, 
1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1), weeks_course = c(10, 
10, 10, 10, 5, 5, 10, 5, 5, 10, 10, 10, 20, 0, 10, 10, 10, 10, 
5, 5), points_expected = c(0, 15, 30, 45, 60, 67.5, 75, 90, 97.5, 
105, 120, 135, 150, 180, 0, 15, 30, 45, 60, 67.5), order = c(1L, 
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 1L, 
2L, 3L, 4L, 5L, 6L), starttermin = c(1, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0), kull = c(1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2), start_date = structure(c(17041, 
17041, 17041, 17041, 17041, 17041, 17041, 17041, 17041, 17041, 
17041, 17041, 17041, 17041, 17405, 17405, 17405, 17405, 17405, 
17405), class = "Date"), start_date_points = structure(c(17041, 
17132, 17202, 17272, 17342, 17461, 17496, 17566, 17601, 17636, 
17706, 17860, 17930, 18070, 17405, 17496, 17566, 17636, 17706, 
17825), class = "Date"), end_date_points = structure(c(17131, 
17201, 17271, 17341, 17460, 17495, 17565, 17600, 17635, 17705, 
17859, 17929, 18069, 18069, 17495, 17565, 17635, 17705, 17824, 
17859), class = "Date"), finished_date = structure(c(18070, 18070, 
18070, 18070, 18070, 18070, 18070, 18070, 18070, 18070, 18070, 
18070, 18070, 18070, 18434, 18434, 18434, 18434, 18434, 18434
), class = "Date")), class = c("grouped_df", "tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -20L), groups = structure(list(
    start_date = structure(c(17041, 17405), class = "Date"), 
    .rows = list(1:14, 15:20)), row.names = c(NA, -2L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE))

1 个答案:

答案 0 :(得分:2)

一个问题是=不是==,其次,lead的{​​{1}}在结尾处创建一个default,如果需要更改,更改NA。另外,我们不需要default来强制,可以使用ifelse

as.integer