r - 首先和最后使用 dplyr 但忽略 NA 值

标签 r dplyr

我有以下数据框,我需要忽略 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

谢谢!

最佳答案

mutate没有 na.rm选项,也没有 first()last()在这里更合适。您可以使用 na.omit 自己省略缺失值:

firstlast <- firstlast %>% group_by(id) %>%
    mutate(
        var_first = first(na.omit(var_a)),
        var_last = last(na.omit(var_a)),
        change = var_last - var_first
    )
# Source: local data frame [17 x 5]
# Groups: id [4]
# 
#        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

作为旁注,给出 mutate na.rm争论没有多大意义。什么 NA你会省略值吗?计算中使用的任何列中的任何行?其他输入?只是结果?您将如何填充已删除的行以保持相同的值?像上面那样明确要好得多。

关于r - 首先和最后使用 dplyr 但忽略 NA 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38230305/

相关文章:

r - 是否有与 plyr::join_all 等效的 dplyr 或 data.table?通过数据框列表加入?

R:在多列上转换变量

regex - R gsub 从文本中提取电子邮件

r - 在数据框中生成具有条件值的行

r - 使用 dplyr group_by 时将汇总条件应用于一系列列?

html - blogdown 不自动缩放图像 - 在 iOS 上查看时它们会被中途截断

r - 在我自己的函数中使用 summarise_ 和 group_by_

r - ggplot2 为分面图中的两个 Y 轴分别添加单独的图例

r - 如何找到两个向量中相同元素的数量?

r - 如何修复R的错误 “missing value where TRUE/FALSE needed”?