我正在寻找一种方法来获取组中省略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
答案 0 :(得分:2)
一种方法是使用na.omit
和tail
:
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)
使用逻辑向量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
对第一个元素进行分组
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