r - (R) 如果另一列中唯一的结果匹配是 NA,则根据字符串名称过滤行
问题描述
标题可能听起来有点奇怪,但我没有找到更好地定义我的问题的方法。
这是一个示例数据集:
test = data.frame(genus = c("Acicarpha", "Acicarpha", "Acicarpha", "Acicarpha", "Acisanthera", "Acisanthera", "Acisanthera", "Acisanthera", "Acmella", "Acmella"), sp1 = c("NA", "bonariensis", "bonariensis", "spathulata", NA, "variabilis", "variabilis", "variabilis", NA, NA))
如您所见,我有几个genus+sp1
可能的物种名称 ( ):Acicarpha NA、Acicarpha bonariensis、Acicarpha spathulata、Acisanthera variabilis、Acisanthera NA和Acmella NA。
这是交易:我试图只选择与 Acmella NA 相关的行,因为该列上唯一的返回值sp1
是 NA。其他物种也有 NA,但它们不仅有NA。我怎样才能做到这一点?我在敲我的头。
解决方案
这是一些代码,可以满足我的要求。它有四个步骤:
- 按 对行进行分组
genus
。 - 如果每个属的所有观测值都是,则创建一个新列,否则(即
all_sp1_na
,如果至少一个观测值不属于该属)。TRUE
sp1
NA
FALSE
FALSE
sp1
NA
- 筛选为
all_sp1_na
true 的行。 - 删除临时列
all_sp1_na
。
library(tidyverse)
test %>%
group_by(genus) %>%
mutate(all_sp1_na = all(is.na(sp1))) %>%
filter(all_sp1_na) %>%
select(-all_sp1_na)
它给出了这个结果:
# A tibble: 2 x 2
# Groups: genus [1]
genus sp1
<chr> <chr>
1 Acmella NA
2 Acmella NA
如果您正在寻找其他东西,请告诉我。
推荐阅读
- ruby-on-rails - 左外连接导轨在 where 条件下具有急切加载
- struct - Julia:更改函数中选择的可变结构属性
- java - 如何在java8中将对象数组转换为用户定义的对象
- vuejs2 - Vuejs2-从“v-model”获取动态值,计算全部并显示在计算属性中
- wpf - 在运行时将列动态添加到数据网格
- c# - WebSocketOptions 忽略接收缓冲区大小
- javascript - 值是连接而不是相加的
- node.js - 如何避免错误:发送后无法设置标头?
- python - 用布尔值旋转的熊猫
- kubernetes - Docker for Mac - Kubernetes - 参考本地镜像