首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数一数护士在与病人接触前洗手的次数:X在Y之前,group_by(ID)?

数一数护士在与病人接触前洗手的次数:X在Y之前,group_by(ID)?
EN

Stack Overflow用户
提问于 2020-08-04 21:07:49
回答 2查看 55关注 0票数 1

我有一套对护士进行病人护理的观察行为,并记录他们触摸或做的事情。这可能看起来像这样:

代码语言:javascript
复制
df<-data.frame(ActivityID=rep(1:3, each=3),
Action=c("Door", "Hygiene", "Patient", "Door", "Patient", "Door", "Door", "Patient", "Hygiene"))

我想要检查他们是否在第一次接触病人之前洗手,并计算每一次ActivityID中有多少次发生这种情况。本质上,我想知道对于每个活动,X是否发生在Y之前。

我的想法是使用它来查找Patient和Hygiene的第一个匹配项:

代码语言:javascript
复制
require(dplyr)
a=df%>%
group_by(ActivityID) %>%
  which(Action=="Hygiene")

b=df%>%
group_by(ActivityID) %>%
  which(Action=="Patient")

which(a<b)

但这在管状结构中似乎不起作用,有时,它们不会接触病人。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-04 21:22:13

可以使用以下方法计算唯一活动的总数:

代码语言:javascript
复制
library(dplyr)
total_Activities <- n_distinct(df$ActivityID)
total_Activities
#[1] 3

我们可以编写一个函数来检查在第一次接触患者之前是否随时洗手:

代码语言:javascript
复制
hands_washed_before_touch <- function(x) {
    ind1 <- which(x == 'Hygiene')
    ind2 <- which(x == 'Patient')
    length(ind1) && length(ind2) && ind1[1] < ind2[1]
}

并按组使用:

代码语言:javascript
复制
df1 <- df %>% 
        group_by(ActivityID) %>% 
        summarise(hands_washed = hands_washed_before_touch(Action))
df1
# ActivityID hands_washed
#       <int> <lgl>       
#1          1 TRUE        
#2          2 FALSE       
#3          3 FALSE      

为了得到计数,我们可以sum hands_washed列,即sum(df1$hands_washed)

票数 4
EN

Stack Overflow用户

发布于 2020-08-05 01:21:30

这是使用dplyr包中的case_when的另一种选择。

代码语言:javascript
复制
 library(dplyr)
  df1<-  df %>% 
        group_by(ActivityID) %>% 
        mutate(hands_washed = case_when(
            !any(Action == "Hygiene") ~ "False",
            min(c(which(Action == "Hygiene"), Inf)) > which.max(Action == "Patient")~ "False",
            TRUE ~ "True"))%>%
    ungroup()
    df1
    # A tibble: 9 x 3
    # Groups:   ActivityID [3]
    #  ActivityID Action  hands_washed
    #       <int> <fct>   <chr>       
    #1          1 Door    True        
    #2          1 Hygiene True        
    #3          1 Patient True        
    #4          2 Door    False       
    #5          2 Patient False       
    #6          2 Door    False       
    #7          3 Door    False       
    #8          3 Patient False       
    #9          3 Hygiene False     
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63247591

复制
相关文章

相似问题

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