首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >尝试在R中查找满足顺序条件的ID的匹配项

尝试在R中查找满足顺序条件的ID的匹配项
EN

Stack Overflow用户
提问于 2020-07-08 16:47:40
回答 2查看 22关注 0票数 1

我试图根据一个人是否满足一组条件以及随后是否满足另一组条件来返回一个逻辑向量。我使用的数据框如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Person.Id     Year       Term

250             1         3
250             1         1
250             2         3  
300             1         3           
511             2         1
300             1         5
700             2         3

我想返回的是一个逻辑向量,如果person ID 250具有年份1和术语3,并且以后具有年份2术语3,则表示true/false。因此,如果一个人只具有年份1术语3或年份1术语5,则将返回false。首选dplyr解决方案!我觉得这很简单,我只是遗漏了一些东西。我最初尝试了这个代码,但它返回的都是一个空白的df:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df2 <- df1 %>%
        group_by(Person.Id) %>%
        filter((year==1 & term==3) & (year==2 & term==3)) 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-08 17:10:29

你在找这样的东西吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
require(dplyr)

df %>% 
  group_by(Person.Id) %>% 
  mutate(count=sum((year==1 & term==3) | (year==2 & term==3))) %>% 
  mutate(count2=if_else(count==2,T,F))

# A tibble: 7 x 5
# Groups:   Person.Id [4]
  Person.Id  year  term count count2
      <int> <int> <int> <int> <lgl> 
1       250     1     3     2 TRUE  
2       250     1     1     2 TRUE  
3       250     2     3     2 TRUE  
4       300     1     3     1 FALSE 
5       511     2     1     0 FALSE 
6       300     1     5     1 FALSE 
7       700     2     3     1 FALSE 
票数 1
EN

Stack Overflow用户

发布于 2020-07-08 17:03:44

也许这能有所帮助:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#Data
Data <- structure(list(Person.Id = c(250L, 250L, 250L, 300L, 511L, 300L, 
700L), Year = c(1L, 1L, 2L, 1L, 2L, 1L, 2L), Term = c(3L, 1L, 
3L, 3L, 1L, 5L, 3L)), row.names = c(NA, -7L), class = "data.frame")
#Flags
cond1 <- Data$Year==1 & Data$Term==3
cond2 <- Data$Year==2 & Data$Term==3
#Replace
Data$Flag1 <- 0
Data$Flag1[cond1]<-1
Data$Flag2 <- 0
Data$Flag2[cond2]<-1
#Filter 
Data %>% group_by(Person.Id) %>% filter(Flag1==1 | Flag2==1)

# A tibble: 4 x 5
# Groups:   Person.Id [3]
  Person.Id  Year  Term Flag1 Flag2
      <int> <int> <int> <dbl> <dbl>
1       250     1     3     1     0
2       250     2     3     0     1
3       300     1     3     1     0
4       700     2     3     0     1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62799637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文