【发布时间】:2018-01-06 17:28:57
【问题描述】:
所以我试图过滤掉我的数据集中的某些东西。
这是我的数据集的一个非常精简的示例:
fish <- data.frame ("order"=c("a", "a", "a", "b", "b", "c", "c", "d", "d", "e", "e"),
"family"= c("r", "s", "t", "r", "y", "y", "y", "u", "y", "u", "y"),
"species"=c(7, 8, 9, 6, 5, 4, 3, 10, 1, 11, 2))
所以我有
fish <- fish%>%
filter(
!(order %in% c("a", "b", "c"))&
!(family %in% c("r","s","t","u"))
)
应该删除 a,b,c 中的所有订单以及 , r, s, t, u 中的所有族。离开我
order family species
d y 10
e y 11
但问题是,我要过滤掉科中的两个物种。所以说物种1在家庭“r”中。我希望物种 1 留在数据集中,同时过滤家庭 r 的所有其余部分。所以我希望输出看起来像:
order family species
d y 10
e y 11
d r 1
e r 2
我如何确保在过滤掉家庭组时,保留这两个物种?
谢谢!
【问题讨论】:
-
我猜“Scorpaenichthys marmoratus”是 Scorpaenidae-family 中一个物种的属种名称(也许“Ophidiiformes”是“Ophiodon elongatus”的顺序?)。如果是这样的话,你对你的观众的期望太高了。这里的大多数读者都没有生物学系统发育学方面的丰富背景。您应该构建一个更通用的示例,其中包括定义具有所有这些树功能的
fish数据对象。还要明确“排除把这些东西拿出来”这个短语中的双重否定结构是否真的意味着“保留这些物品”。 -
最干净的代码(不一定是最短的)是执行第二个过滤器(species %in% (c(......)) 并通过 bind_rows 组合两个数据帧。
-
我要等一两个小时才能投票结束这个问题,因为它不清楚,但我希望通过编辑来澄清问题并构建一个可能包含包含的完整示例
dput(head(fish))的输出 -
在没有看到您的数据和预期输出的情况下很难确定,但可能类似于:
filter(!(family %in% c("r","s","t","u")) | species %in% 1:2)