首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用过滤器和逻辑运算

使用过滤器和逻辑运算
EN

Stack Overflow用户
提问于 2019-07-12 00:10:44
回答 2查看 27关注 0票数 0

我正在试着写一段代码,但是我还没能达到结果。我正在使用来自tidyverse的过滤器。我是R的新手,所以我觉得这很难。

这是数据帧的形式:

代码语言:javascript
复制
ID  Meeting1    Meeting2
P40 Yes         NA
P40 Yes         NA
P40 NA          Yes
P42 NA          Yes
P43 NA          Yes
P44 Yes         NA
P44 NA          Yes

我正在尝试编写一个代码,用于筛选Id并查找已经去过会议% 2但不想在去见%2之前先去见%1的观察值。

这是我写的代码:

代码语言:javascript
复制
tt %>% group_by(ID) %>% filter(Meeting1 == "Yes" | Meeting2 == "Yes")
EN

回答 2

Stack Overflow用户

发布于 2019-07-12 00:14:02

首先,我们确保会议列是字符,而不是因子。然后我们用一个更有用的"No"替换NA,然后我们filter

代码语言:javascript
复制
dd %>% 
  group_by(ID) %>% 
  mutate_at(vars(starts_with("Meeting")), as.character) %>%
  mutate_at(vars(starts_with("Meeting")), ~ifelse(is.na(.), "No", .)) %>% 
  filter(any(Meeting2 == "Yes") & !any(Meeting1 == "Yes"))
# # A tibble: 2 x 3
# # Groups:   ID [2]
#   ID    Meeting1 Meeting2
#   <fct> <chr>    <chr>   
# 1 P42   No       Yes     
# 2 P43   No       Yes  

处理此示例数据:

代码语言:javascript
复制
  dd = read.table(text = 'ID  Meeting1    Meeting2
P40 Yes         NA
P40 Yes         NA
P40 NA          Yes
P42 NA          Yes
P43 NA          Yes
P44 Yes         NA
P44 NA          Yes', header = T)
票数 0
EN

Stack Overflow用户

发布于 2019-07-12 00:22:31

另一种可能是:

代码语言:javascript
复制
df %>%
 group_by(ID) %>% 
 filter(any(cumsum(!is.na(Meeting1)) == 0 & cumsum(!is.na(Meeting2)) == 1))

  ID    Meeting1 Meeting2
  <chr> <chr>    <chr>   
1 P42   <NA>     Yes     
2 P43   <NA>     Yes   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56993351

复制
相关文章

相似问题

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