Заполнение переменной на основе суммы каждого уровня - PullRequest
1 голос
/ 23 апреля 2020

Я искал помощи в проблеме, в которой я сейчас застрял в проекте (представьте после текста).

По сути, я пытаюсь заполнить переменную критериями уровней на основе количества раз, когда пациент записывал данные за неделю, чтобы изучить качество записи.

Критерии для уровней следующие:

3+ readings/week == "4",
3 readings/week == "3",
2 readings/week == "2",
1 reading/week == "1",
NA == "0"

Сначала я создал новую переменную для недель с помощью функции week () lubridate, которая дала мне номера недель в зависимости от того, где даты были в году. В идеале я хотел бы выделить номера недель в порядке возрастания (1-n), начиная с 1 с первой даты, которую пациент записал, до последней даты.

Подумал об использовании a для l oop, но в настоящее время используется case_when. Проблема, с которой я в настоящее время сталкиваюсь, заключается в том, чтобы установить условие проверки частоты уровней для каждого идентификатора пациента, чтобы затем назначить критерии.

Любая помощь будет полезна, поскольку я застрял на ней для большинства сегодня большое спасибо (представьте ниже).

library(lubridate)
#> Warning: package 'lubridate' was built under R version 3.5.3
#> 
#> Attaching package: 'lubridate'
#> The following object is masked from 'package:base':
#> 
#>     date
library(tidyverse)
#> Warning: package 'tidyverse' was built under R version 3.5.3
#> Warning: package 'ggplot2' was built under R version 3.5.3
#> Warning: package 'tibble' was built under R version 3.5.3
#> Warning: package 'tidyr' was built under R version 3.5.3
#> Warning: package 'readr' was built under R version 3.5.3
#> Warning: package 'purrr' was built under R version 3.5.3
#> Warning: package 'dplyr' was built under R version 3.5.3
#> Warning: package 'stringr' was built under R version 3.5.3
#> Warning: package 'forcats' was built under R version 3.5.3

##Variables##

patientid <- c("-2147483646", "-2147483646", "-2147483646", "-2147483646", "-2147483646", "-2147483646", "-2147483646", "-2147483646", 
               "-2147483646", "-2147483646", "-2147483646", "-2147483646", "-2147483646", "-2147483646", "-2147483646", "-2147483646")

date <- c("2018-08-06", "2018-08-07", "2018-08-07", "2018-08-07", "2018-08-15", "2018-08-15", "2018-08-15", "2018-08-20", "2018-08-20",
          "2018-08-20", "2018-08-27", "2018-08-27", "2018-08-27", "2018-09-03", "2018-09-03", "2018-09-03")

week <- week(date)

adherence <- ""

test.df <- data.frame(patientid, date, week, adherence) #test df with variables above

##Dataframe and attempt##

table(test.df$week) #See frequency of each
#> 
#> 32 33 34 35 36 
#>  4  3  3  3  3

test.df <- test.df %>% #Dataframe
  mutate(
    patientid = as.factor(patientid),
    date = as.Date(date),
    week = as.factor(week))

adherence <- test.df %>% #Attempt to create if/else/else if loop to populate adherence
  mutate(week = 
           if(count(week) > 3){adherence == "4"})
#> Error in UseMethod("summarise_"): no applicable method for 'summarise_' applied to an object of class "factor"

1 Ответ

0 голосов
/ 24 апреля 2020

Я думаю, что это версия того, что вы хотите:

test.df <- data.frame(patientid, date) #test df with variables above

test.df %>% #Dataframe
  mutate(
    patientid = as.factor(patientid),
    date = as.Date(date),
    week = floor_date(date, "week")
  ) %>% 
  group_by(patientid, week) %>% 
  summarize(total_readings = n(),
         adherence = case_when(is.na(total_readings) ~ 0L,
                               total_readings < 4 ~ total_readings,
                               total_readings >= 4 ~ 4L,
                               TRUE ~ NA_integer_))

Единственное, о чем не заботится, - это недельная последовательность.

...