【发布时间】:2018-09-07 10:53:57
【问题描述】:
我正在寻找一种方法来从每个组中提取第一个和最后一个非 NA 值。我正在使用 dplyr::first() 和 dplyr::last(),但我不知道如何选择第一个或最后一个非 NA 值。
library(dplyr)
set.seed(123)
d <- data.frame(
group = rep(1:3, each = 3),
year = rep(seq(2000,2002,1),3),
value = sample(1:9, r = T))
#Introduce NA values in first row of group 2 and last row of group 3
d %>%
mutate(
value = case_when(
group == 2 & year ==2000 ~ NA_integer_,
group == 3 & year ==2002 ~ NA_integer_,
TRUE ~ value))%>%
group_by(group) %>%
mutate(
first = dplyr::first(value),
last = dplyr::last(value))
结果(有问题)
# A tibble: 9 x 5
# Groups: group [3]
group year value first last
<int> <dbl> <int> <int> <int>
1 1 2000 3 3 4
2 1 2001 8 3 4
3 1 2002 4 3 4
4 2 2000 NA NA 1
5 2 2001 9 NA 1
6 2 2002 1 NA 1
7 3 2000 5 5 NA
8 3 2001 9 5 NA
9 3 2002 NA 5 NA
您能帮我在第 2 组的“第一”列中设置值 = 9,在组 3 = 9 的“最后”列中设置值吗?
如果存在这样的解决方案,我非常喜欢 tidyverse 解决方案?
【问题讨论】:
-
删除 NA,试试:
first(na.omit(value))? -
@zx8754 对不起种子 - 我更正了。删除 NA 将不起作用,因为这些行包含我需要的其他非 NA 值。
-
我不是从数据框中删除 NA,而是仅在
first/last函数中,请参阅下面我编辑的答案。