r - 如何删除特定列中具有 NA 的行,但前提是它们在另一列中有重复?
问题描述
所以我有这个数据框,其中有些行在“物种”列中重复,有些则没有。所有类型的行中都有 NA,包括重复的和不重复的。
Species | A | B |
--------------------------------
Tilapia guineensis | 1 | 10 |
Tilapia guineensis | 1 | NA |
Tilapia zillii | 3 | 23 |
Tilapia zillii | 3 | NA |
Eutrigla gurnardus | 18 | 4 |
Caramila artida | 9 | NA |
Sprattus sprattus | 7 | 6 |
Spalili burcant | 11 | NA |
我想删除在 B 列中具有 NA 的行,但前提是它们属于重复行。我的输出将是这样的:
Species | A | B |
--------------------------------
Tilapia guineensis | 1 | 10 |
Tilapia zillii | 3 | 23 |
Eutrigla gurnardus | 18 | 4 |
Caramila artida | 9 | NA |
Sprattus sprattus | 7 | 6 |
Spalili burcant | 11 | NA |
基本上,如果某一行在 Species 列中重复并且在 B 列中有一个 NA,我想用 NA 删除该行。但是,如果某一行在 Species 列中是唯一的,我想保留它,即使它有 NA。
抱歉,如果我感到困惑,请提前致谢。
可重现的数据格式:
df <- read.csv(text="
Species,A,B
Tilapia guineensis,1,10
Tilapia guineensis,1,NA
Tilapia zillii,3,23
Tilapia zillii,3,NA
Eutrigla gurnardus,18,4
Caramila artida,9,NA
Sprattus sprattus,7,6
Spalili burcant,11,NA")
解决方案
我认为您可以避免使用任何分组逻辑,并一次获得结果:
df[!(duplicated(df$Species) & is.na(df$B)),]
# Species A B
#1 Tilapia guineensis 1 10
#3 Tilapia zillii 3 23
#5 Eutrigla gurnardus 18 4
#6 Caramila artida 9 NA
#7 Sprattus sprattus 7 6
#8 Spalili burcant 11 NA
推荐阅读
- firebase - NGINX 作为 Firebase 功能的崇高代理以防止 DDOS 攻击?
- css - 如何制作 css 网格 - grid-template-columns: auto-fit 在 IE 中工作
- javascript - LitElement 从列表中删除项目
- ruby-on-rails - 尝试将数据添加到联接表中时的统一常量 User:Bookings
- python - 如何将 json 文件解压缩到 Pandas 数据框中
- vb.net - 将控件从工具箱添加到 Windows 窗体时出错
- javascript - 使用 array.map() 从对象数组中查找元素
- electron - 带有 TensorflowJS 的 Electron - 正在寻找 napi-v4 但只存在 napi-v5
- python - 如何设置引用对象的初始值
- javascript - 如何在javascript中获取特定时区的本地日期时间?