【发布时间】: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
【问题讨论】:
我正在寻找一种方法来获取组中省略 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
【问题讨论】:
一种方法是使用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())
【讨论】:
last(na.omit(col_2)) 和 col_2[!is.na(col_2)] 不起作用,但 tail 起作用!
按'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 已经回答了这个问题,但感谢您提供了很好的例子!