省略NA-dplyr的组中的最后一个元素

时间:2017-06-13 18:37:06

标签: r group-by dplyr

我正在寻找一种方法来获取组中省略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

2 个答案:

答案 0 :(得分:2)

一种方法是使用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())

答案 1 :(得分:1)

按照&#39; col_1&#39;,is.na(col_2)使用逻辑向量slicelibrary(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 对第一个元素进行分组

DECLARE @NAME VARCHAR(50)
SET @NAME = 'Smith,Jane' -- 'Smith,Jane Ann'

SELECT LEFT(@NAME, CHARINDEX(',', @NAME) - 1) AS LastName,  
    CASE 
        WHEN (CHARINDEX(' ', @NAME) = 0)
            THEN SUBSTRING(@NAME, CHARINDEX(',', @NAME) + 1, 100) 
        ELSE 
            SUBSTRING(@NAME, CHARINDEX(',', @NAME) + 1, CHARINDEX(' ', @NAME) - CHARINDEX(',', @NAME)) 
    END AS FirstName,
    CASE 
        WHEN (CHARINDEX(' ', @NAME) = 0)
            THEN ''
        ELSE 
            SUBSTRING(@NAME, CHARINDEX(' ', @NAME) + 1, 100) 
    END AS MiddleName