首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅当不存在于整个df r中时,才从变量中移除0。

仅当不存在于整个df r中时,才从变量中移除0。
EN

Stack Overflow用户
提问于 2022-07-29 17:13:55
回答 4查看 62关注 0票数 3

我有以下测试df:

代码语言:javascript
复制
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在至少一个网站。

最好采用潮汐法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-07-29 17:26:36

您可以尝试这一点(有来自benson23的建议)

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2022-07-29 17:22:15

您的value列是一个因子类,因此我们需要在筛选之前将它们的数值与零进行比较:

代码语言:javascript
复制
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   
票数 1
EN

Stack Overflow用户

发布于 2022-07-29 17:50:44

使用base R%in%子集一起使用“物种”,其中“值”不等于0,然后从物种子集的整个数据集中创建带有“物种”的逻辑表达式。

代码语言:javascript
复制
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的相同方法。

代码语言:javascript
复制
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     1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73168888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档