我有以下测试df:
df1 <- data.frame(site = c('1' , '1' , '1' , '1' , '2' , '2' ,
'2' , '2' , '3' , '3' , '3' , '3') ,
species = c('A' , 'B' , 'C' , 'D' , 'A' , 'B' ,
'C' , 'D' , 'A' , 'B' , 'C' , 'D') ,
value = c('1' , '0' , '0' , '4' , '0' , '0' ,
'3' , '4' , '0' , '0' , '0' , '1')) 我需要过滤出物种,只有当他们有一个值为0的每个网站。我需要离开物种和0,如果他们至少有一个值>= 1在至少一个网站。
最好采用潮汐法。
发布于 2022-07-29 17:26:36
您可以尝试这一点(有来自benson23的建议)
library(dplyr)
df1 %>%
group_by(species) %>%
filter(!all(value == "0"))
# A tibble: 9 × 3
# Groups: species [3]
site species value
<chr> <chr> <chr>
1 1 A 1
2 1 C 0
3 1 D 4
4 2 A 0
5 2 C 3
6 2 D 4
7 3 A 0
8 3 C 0
9 3 D 1发布于 2022-07-29 17:22:15
您的value列是一个因子类,因此我们需要在筛选之前将它们的数值与零进行比较:
library(dplyr)
df1 %>%
group_by(species) %>%
filter(any(as.numeric(as.character(value)) >= 1))
# # A tibble: 9 x 3
# # Groups: species [3]
# site species value
# <fct> <fct> <fct>
# 1 1 A 1
# 2 1 C 0
# 3 1 D 4
# 4 2 A 0
# 5 2 C 3
# 6 2 D 4
# 7 3 A 0
# 8 3 C 0
# 9 3 D 1 发布于 2022-07-29 17:50:44
使用base R与%in%子集一起使用“物种”,其中“值”不等于0,然后从物种子集的整个数据集中创建带有“物种”的逻辑表达式。
subset(df1, species %in% species[value != 0])
site species value
1 1 A 1
3 1 C 0
4 1 D 4
5 2 A 0
7 2 C 3
8 2 D 4
9 3 A 0
11 3 C 0
12 3 D 1或使用dplyr filter的相同方法。
library(dplyr)
df1 %>%
filter(species %in% species[value != 0])
site species value
1 1 A 1
2 1 C 0
3 1 D 4
4 2 A 0
5 2 C 3
6 2 D 4
7 3 A 0
8 3 C 0
9 3 D 1https://stackoverflow.com/questions/73168888
复制相似问题