我有以下数据集,我想知道每个组的最小单词,如果没有最小单词(它是 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))
我们可以创建一个逻辑条件is.na
in filter
并返回NA
按“key”进行分组后的行
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)