【问题标题】:Last element in group omitting NA -组中的最后一个元素省略 NA -
【发布时间】:2017-06-13 18:37:06
【问题描述】:

我正在寻找一种方法来获取组中省略 NA 的最后一个元素。标准 dplyr 解决方案不起作用,尚不清楚何时修复issue

有人可以建议解决方法吗?

这是我正在寻找的示例

df <- DataFrame(col_1 = c('A', 'A', 'B', 'B'), col_2 = c(1, NA, 3, 3))

所以我想按 col_1 分组,A 组返回 1,B 组返回 3

【问题讨论】:

    标签: r group-by dplyr


    【解决方案1】:

    一种方法是使用na.omittail

    df %>% group_by(col_1) %>% summarise(last=tail(na.omit(col_2),1))
    
       col_1  last
      <fctr> <dbl>
    1      A     1
    2      B     3
    

    或者你可以filter你的数据框,然后slice每组的最后一行:

    df %>% filter(!is.na(col_2)) %>% group_by(col_1) %>% slice(n())
    

    【讨论】:

    • 谢谢!有趣的是,last(na.omit(col_2))col_2[!is.na(col_2)] 不起作用,但 tail 起作用!
    【解决方案2】:

    按'col_1'分组后,arrange使用逻辑向量is.na(col_2)slice第一个元素

    library(dplyr)
    df %>%
      group_by(col_1)%>% 
      arrange(is.na(col_2)) %>%
      slice(1)
    # A tibble: 2 x 2
    # Groups:   col_1 [2]
    #    col_1 col_2 
    #  <fctr> <dbl>
    #1      A     1
    #2      B     3
    

    【讨论】:

    • 非常感谢! arrange(is.na(col_2)) 对我来说很陌生。我的问题陈述得很糟糕。我需要每个组中的最后一个非 NA 元素。 Lamia 已经回答了这个问题,但感谢您提供了很好的例子!
    猜你喜欢
    • 2020-10-31
    • 2011-03-07
    • 2017-09-25
    • 2012-08-09
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多