如何在dplyr中使用Slice来保留R中具有NA值的行 [英] How to use slice in dplyr to keep the rows with NA values in R
本文介绍了如何在dplyr中使用Slice来保留R中具有NA值的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下数据集,我想知道每个组的最小单词,如果没有最小单词(它是NA),我仍然想显示它
df=data.frame(
key=c("A","A","B","B","C"),
word=c(1,2,3,5,NA))
df%>%group_by(key)%>%slice(which.min(word))
这不包括我想要的key=C、word=na:
df_out=data.frame(
key=c("A","B","C"),
word=c(1,3,NA))
推荐答案
我们可以在filter
中使用is.na
创建逻辑条件,并在按‘key’进行分组后也返回NA
行
library(dplyr)
df %>%
group_by(key) %>%
filter(word == min(word)|is.na(word))
或使用slice
。我们不需要任何if/else
条件
df %>%
group_by(key) %>%
slice(which(word ==min(word)|is.na(word)))
# A tibble: 3 x 2
# Groups: key [3]
# key word
# <chr> <dbl>
#1 A 1
#2 B 3
#3 C NA
或更紧凑
df %>%
group_by(key) %>%
slice(match(min(word), word))
# A tibble: 3 x 2
# Groups: key [3]
# key word
# <chr> <dbl>
#1 A 1
#2 B 3
#3 C NA
注意:使用match
返回第一个匹配项的索引。
which.min
删除NA
which.min(c(NA, 1, 3))
#[1] 2
这篇关于如何在dplyr中使用Slice来保留R中具有NA值的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文