首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一列满足R中的AND条件的组中过滤数据

在一列满足R中的AND条件的组中过滤数据
EN

Stack Overflow用户
提问于 2022-02-02 06:54:10
回答 2查看 508关注 0票数 0

我有以下数据,为此,我只需要过滤每个组(id)具有“进取量”和“流量”的行。结果应该是这样的:

代码语言:javascript
复制
> df <- tibble(id = c(1, 1, 2, 3, 3, 4, 4, 5, 6, 7, 7),
+              type = c("intake", "discharge", "intake", "intake", "discharge",
+                       "intake", "discharge", "intake", "intake", "intake", "discharge"))
> df
      id type     
   <dbl> <chr>    
 1     1 intake   
 2     1 discharge
 3     2 intake   
 4     3 intake   
 5     3 discharge    
 6     4 intake   
 7     4 discharge
 8     5 intake   
 9     6 intake   
10     7 intake   
11     7 discharge

对此:

代码语言:javascript
复制
      id type     
   <dbl> <chr>    
 1     1 intake   
 2     1 discharge   
 3     3 intake   
 4     3 discharge    
 5     4 intake   
 6     4 discharge 
 7     7 intake   
 8     7 discharge

这样,不同时具有进给量和排出量的组(ids)被移除(并且只有那些两者兼备的组(Ids)被保留)。

我希望这有道理..。抱歉,今天太长了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-02 09:03:12

下面是一种选择具有"intake""discharge"的组的方法。

代码语言:javascript
复制
library(dplyr)

values <- c('intake', 'discharge')

df %>%
  group_by(id) %>%
  filter(all(values %in% type) & type %in% values) %>%
  ungroup

#     id type     
#  <dbl> <chr>    
#1     1 intake   
#2     1 discharge
#3     3 intake   
#4     3 discharge
#5     4 intake   
#6     4 discharge
#7     7 intake   
#8     7 discharge

all(values %in% type)选择具有两个值的完整组,而type %in% values将在那些具有两个值之一的组行中进行选择。

票数 3
EN

Stack Overflow用户

发布于 2022-02-02 07:12:10

代码语言:javascript
复制
library(dplyr)
df %>%
  group_by(id) %>%
  filter(sum(type == "intake") >= 1,
         sum(type == "discharge") >= 1) %>%
  # add below if we only want intake/discharge lines
  # filter(type %in% c("intake", "discharge")) %>% 
  ungroup()

结果(由于OP中添加了“其他”,期望的行为不明确)

代码语言:javascript
复制
# A tibble: 9 x 2
     id type     
  <dbl> <chr>    
1     1 intake   
2     1 discharge
3     3 intake   
4     3 discharge
5     3 other    
6     4 intake   
7     4 discharge
8     7 intake   
9     7 discharge
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70951525

复制
相关文章

相似问题

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