首页 > 解决方案 > R中是否有一种方法可以对分组数据框的列执行逻辑查询并根据返回的值修改一个数据元素

问题描述

我正在清理一项研究的数据。每个受试者都有一个唯一的研究识别号(studyid)。他们的访问次数从 1 到 3 不等。这是前两列的样子:

> head(x[1:2])
# A tibble: 6 x 2
  studyid  visit_name       
  <fct>    <chr>                   
1 3383-002 screening_visit          
2 3383-002 medication_visit          
3 3383-002 follow-up_visit          
4 3383-007 screening_visit         
5 3383-008 medication_visit          
6 3383-009 medication_visit

如果该个体主题存在,我想将screening_visit指定为基线;如果不是,则将药物访问指定为基线,如果不是,则将后续访问指定为基线。

我可以 group_by studyid 并为每个主题获取最多 3 行的组,但我看不到同时对这 3 行执行逻辑查询、返回值然后根据答案修改变量的一个元素的方法.

我可以看到使用 mutate 但它一次只能在一行上工作。我还阅读了有关地图和其他迭代工具的信息,但看不到如何在此处应用它们。请帮我解决或指出可能对我有帮助的阅读方向。

标签: rdataframe

解决方案


这是你要找的吗?

library(tidyverse)
my_df<- data.frame(
  stringsAsFactors = FALSE,
           studyid = c("3383-002","3383-002",
                       "3383-002","3383-007","3383-008","3383-009"),
        visit_name = c("screening_visit",
                       "medication_visit","follow-up_visit","screening_visit",
                       "medication_visit","medication_visit")
)

glimpse(my_df)
#> Rows: 6
#> Columns: 2
#> $ studyid    <chr> "3383-002", "3383-002", "3383-002", "3383-007", "3383-00...
#> $ visit_name <chr> "screening_visit", "medication_visit", "follow-up_visit"...

my_df %>% 
  mutate(visit_name=fct_inorder(visit_name)) %>% 
  mutate(visit_name_num=as.numeric(visit_name)) %>% 
  group_by(studyid) %>% 
  arrange(visit_name_num, .by_group=T) %>% 
  mutate(baseline=visit_name[1])
#> # A tibble: 6 x 4
#> # Groups:   studyid [4]
#>   studyid  visit_name       visit_name_num baseline        
#>   <chr>    <fct>                     <dbl> <fct>           
#> 1 3383-002 screening_visit               1 screening_visit 
#> 2 3383-002 medication_visit              2 screening_visit 
#> 3 3383-002 follow-up_visit               3 screening_visit 
#> 4 3383-007 screening_visit               1 screening_visit 
#> 5 3383-008 medication_visit              2 medication_visit
#> 6 3383-009 medication_visit              2 medication_visit

reprex 包(v0.3.0)于 2020-12-03 创建


推荐阅读