如何使用summary_all获取与每个组的最大索引关联的非缺失值

时间:2019-01-04 22:54:01

标签: r dplyr summarize

对于许多列,我想找到与最大索引值关联的每个组的不丢失值。

通过使用带有which.max的summary_all已经相当接近了,但是我不确定如何在找到最新值之前从每个向量中删除NA。我阅读了有关在summary_all中使用na.rm的功能,例如平均值,但不确定如何在没有内置功能的情况下合并类似功能。我已经尝试过na.omit,但是它没有提供我想要的解决方案。

a <- head(iris, 10)
a$num <- 1:10
a$grp <- c("a","a","a","b","b","c","c","d","d","d")
a[10, "Species"] <- NA
a %>%
  group_by(grp) %>%
  summarize_all(funs(na.omit(.)[which.max(num)]))

grp   Sepal.Length Sepal.Width Petal.Length Petal.Width Species   num
<chr>          <dbl>       <dbl>        <dbl>       <dbl> <fct>   <int>
1 a             4.70        3.20         1.30       0.200 setosa      3
2 b             5.00        3.60         1.40       0.200 setosa      5
3 c             4.60        3.40         1.40       0.300 setosa      7
4 d             4.90        3.10         1.50       0.100 NA         10

我希望“种类”列中的所有值都是setosa,但是最后一个值是NA。

3 个答案:

答案 0 :(得分:1)

如果使用data.table方法,则可以尝试:

library (data.table)
a = data.table (a)
a [is.finite (Species), by = grp, .SD [which.max (num) ] ]

答案 1 :(得分:1)

我们可能只查看那些对应变量不是num的变量,而不是全部查看NA

a %>%
  group_by(grp) %>%
  summarize_all(funs(na.omit(.)[which.max(num[!is.na(.)])]))
# A tibble: 4 x 7
#   grp   Sepal.Length Sepal.Width Petal.Length Petal.Width Species   num
#   <chr>        <dbl>       <dbl>        <dbl>       <dbl> <fct>   <int>
# 1 a              4.7         3.2          1.3         0.2 setosa      3
# 2 b              5           3.6          1.4         0.2 setosa      5
# 3 c              4.6         3.4          1.4         0.3 setosa      7
# 4 d              4.9         3.1          1.5         0.1 setosa     10

答案 2 :(得分:1)

您也可以采取一些不同的方法,并先完成NA案例:

library(tidyverse)

a %>% group_by(grp) %>% 
  fill(Species) %>% 
  filter(num == max(num))

tibble: 4 x 7
# Groups:   grp [4]
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species   num grp  
         <dbl>       <dbl>        <dbl>       <dbl> <fct>   <int> <chr>
1          4.7         3.2          1.3         0.2 setosa      3 a    
2          5           3.6          1.4         0.2 setosa      5 b    
3          4.6         3.4          1.4         0.3 setosa      7 c    
4          4.9         3.1          1.5         0.1 setosa     10 d