【发布时间】:2016-07-06 17:38:08
【问题描述】:
我有以下数据框,我需要忽略 id 9 的最后一个值的缺失值。
firstlast <- data.frame(id = as.factor(c("01", "01", "01", "01", "01", "04", "04", "05", "05", "05", "05", "05", "09", "09", "09", "09", "09")),
var_a = c(13, 21, 32, 33, 44, 21, 33, 35, 17, 18, 21, 22, 17, 13, 33, 32, NA))
df 看起来像:
id var_a
1 01 13
2 01 21
3 01 32
4 01 33
5 01 44
6 04 21
7 04 33
8 05 35
9 05 17
10 05 18
11 05 21
12 05 22
13 09 17
14 09 13
15 09 33
16 09 32
17 09 NA
到目前为止我的尝试:
firstlast <- firstlast %>% group_by(id) %>%
mutate(var_first = first(var_a)) %>%
mutate(var_last = last(var_a)) %>%
mutate(change = var_last - var_first)
创建:
id var_a var_first var_last change
(fctr) (dbl) (dbl) (dbl) (dbl)
1 01 13 13 44 31
2 01 21 13 44 31
3 01 32 13 44 31
4 01 33 13 44 31
5 01 44 13 44 31
6 04 21 21 33 12
7 04 33 21 33 12
8 05 35 35 22 -13
9 05 17 35 22 -13
10 05 18 35 22 -13
11 05 21 35 22 -13
12 05 22 35 22 -13
13 09 17 17 NA NA
14 09 13 17 NA NA
15 09 33 17 NA NA
16 09 32 17 NA NA
17 09 NA 17 NA NA
但是,我需要忽略 id 9 的最后一个 NA 观察值的缺失值,而是使用倒数第二个(或第一个观察到的值)。当我在该行包含mutate(var_last = last(var_a), na.rm=TRUE) 时,我会得到一整列 na.rm = TRUE 并且不会忽略 NA 值。
我希望达到的最终df是......
id var_a var_first var_last change
(fctr) (dbl) (dbl) (dbl) (dbl)
1 01 13 13 44 31
2 01 21 13 44 31
3 01 32 13 44 31
4 01 33 13 44 31
5 01 44 13 44 31
6 04 21 21 33 12
7 04 33 21 33 12
8 05 35 35 22 -13
9 05 17 35 22 -13
10 05 18 35 22 -13
11 05 21 35 22 -13
12 05 22 35 22 -13
13 09 17 17 32 15
14 09 13 17 32 15
15 09 33 17 32 15
16 09 32 17 32 15
17 09 NA 17 32 15
谢谢!
【问题讨论】: