Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:发现患者每月至少进行4次血糖测试,并持续至少2个月 df_R - Fatal编程技术网

R:发现患者每月至少进行4次血糖测试,并持续至少2个月 df

R:发现患者每月至少进行4次血糖测试,并持续至少2个月 df,r,R,这里有一个使用dplyr的解决方案。我按患者和试验月分组,计算患者每月进行的试验次数。然后,我计算每个患者测试之间的月差,考虑年度问题。然后,我筛选2个月内至少进行过两次连续检查(因此month_diff==1)且每月至少进行4次检查的患者。然后我只保留第一个测试点,并删除现在未使用的变量month\u dif和n df <- data.frame(PATIENT_ID=c(2), test.year=c(2001), test.

这里有一个使用
dplyr
的解决方案。我按患者和试验月分组,计算患者每月进行的试验次数。然后,我计算每个患者测试之间的月差,考虑年度问题。然后,我筛选2个月内至少进行过两次连续检查(因此
month_diff
==1)且每月至少进行4次检查的患者。然后我只保留第一个测试点,并删除现在未使用的变量
month\u dif
n

    df <- data.frame(PATIENT_ID=c(2),
             test.year=c(2001),
             test.month=c(1),
             value=c(2.7))
库(dplyr)
df%>%
分组依据(患者ID,检查月份)%>%
变异(n=n())%>%
分组依据(患者ID)%>%
当(test.year==lag(test.year)~test.month-lag(test.month)发生变化时(month_dif=case_),
test.year-滞后(test.year)==1和test.month==1和滞后(test.month)==12~1,
真~NA_real(真)]>%
过滤器(任何(月份_dif==1)&n>=4)%>%
切片头(1)%>%
选择(-month\u dif,-n)
#一个tibble:1 x 4
#分组:患者编号[1]
患者ID测试。年测试。月值
1          2      2001          1   2.7
此更新的解决方案还解决了@Gal提到的年份问题

不在同一年发生两个连续测量点的数据

library(dplyr)
df %>% 
  group_by(PATIENT_ID, test.month) %>% 
  mutate(n = n()) %>% 
  group_by(PATIENT_ID) %>% 
  mutate(month_dif = case_when(test.year == lag(test.year) ~ test.month - lag(test.month),
                               test.year - lag(test.year) == 1 & test.month == 1 & lag(test.month) == 12 ~ 1,
                               TRUE ~ NA_real_)) %>% 
  filter(any(month_dif == 1) & n >= 4) %>% 
  slice_head(1) %>% 
  select(-month_dif, - n)

# A tibble: 1 x 4
# Groups:   PATIENT_ID [1]
  PATIENT_ID test.year test.month value
       <dbl>     <dbl>      <dbl> <dbl>
1          2      2001          1   2.7

df这里有一个使用
dplyr
的解决方案。我按患者和试验月分组,计算患者每月进行的试验次数。然后,我计算每个患者测试之间的月差,考虑年度问题。然后,我筛选2个月内至少进行过两次连续检查(因此
month_diff
==1)且每月至少进行4次检查的患者。然后我只保留第一个测试点,并删除现在未使用的变量
month\u dif
n

    df <- data.frame(PATIENT_ID=c(2),
             test.year=c(2001),
             test.month=c(1),
             value=c(2.7))
库(dplyr)
df%>%
分组依据(患者ID,检查月份)%>%
变异(n=n())%>%
分组依据(患者ID)%>%
当(test.year==lag(test.year)~test.month-lag(test.month)发生变化时(month_dif=case_),
test.year-滞后(test.year)==1和test.month==1和滞后(test.month)==12~1,
真~NA_real(真)]>%
过滤器(任何(月份_dif==1)&n>=4)%>%
切片头(1)%>%
选择(-month\u dif,-n)
#一个tibble:1 x 4
#分组:患者编号[1]
患者ID测试。年测试。月值
1          2      2001          1   2.7
此更新的解决方案还解决了@Gal提到的年份问题

不在同一年发生两个连续测量点的数据

library(dplyr)
df %>% 
  group_by(PATIENT_ID, test.month) %>% 
  mutate(n = n()) %>% 
  group_by(PATIENT_ID) %>% 
  mutate(month_dif = case_when(test.year == lag(test.year) ~ test.month - lag(test.month),
                               test.year - lag(test.year) == 1 & test.month == 1 & lag(test.month) == 12 ~ 1,
                               TRUE ~ NA_real_)) %>% 
  filter(any(month_dif == 1) & n >= 4) %>% 
  slice_head(1) %>% 
  select(-month_dif, - n)

# A tibble: 1 x 4
# Groups:   PATIENT_ID [1]
  PATIENT_ID test.year test.month value
       <dbl>     <dbl>      <dbl> <dbl>
1          2      2001          1   2.7

df我在Base-R中提出了这个解决方案。我制作了一个自定义函数来过滤,以避免使用
取消列表来堆叠
拆分

df <- data.frame(PATIENT_ID=c(1,1,1,1,1,1,1,2,2,2,2,2,2,2,2),
                 test.year=c(2000,2000,2000,2001,2001,2001,2001,2001,2001,2001,2001,2002,2002,2002,2002),
                 test.month=c(1,1,1,3,3,3,3,12,12,12,12,1,1,1,1),
                 value=c(3.4,3.2,3.5, 3.9, 1.2, 2.1, 2.9, 2.7, 4.6,5.6,5.9,4.2,4.4,6.1,9.4))

我在Base-R中提出了这个解决方案。我制作了一个自定义函数来过滤,以避免将
拆分
取消列出

df <- data.frame(PATIENT_ID=c(1,1,1,1,1,1,1,2,2,2,2,2,2,2,2),
                 test.year=c(2000,2000,2000,2001,2001,2001,2001,2001,2001,2001,2001,2002,2002,2002,2002),
                 test.month=c(1,1,1,3,3,3,3,12,12,12,12,1,1,1,1),
                 value=c(3.4,3.2,3.5, 3.9, 1.2, 2.1, 2.9, 2.7, 4.6,5.6,5.9,4.2,4.4,6.1,9.4))

下面是一个使用
数据的选项。表

> df_new
  PATIENT_ID test.year test.month value
8          2      2001          1   2.7

下面是一个使用
数据的选项。表

> df_new
  PATIENT_ID test.year test.month value
8          2      2001          1   2.7

你也应该考虑这一年吗?我抄袭了你的代码,但得到了:SLIGHILHAD(1)中的错误。好点,但从这个问题不完全清楚。也可能是
测试。月是患者测试的第一个月,不考虑日历月和年份。我现在在回答中注意到了这一点。@Franky
slice\u head
是最新的
dplyr
版本的一部分。更新
dplyr
然后它应该在测试中起作用。月份是日历月。十二月是12,一月是1。你还应该考虑这一年吗?我抄袭了你的代码,但得到了:SLIGHILHAD(1)中的错误。好点,但从这个问题不完全清楚。也可能是
测试。月是患者测试的第一个月,不考虑日历月和年份。我现在在回答中注意到了这一点。@Franky
slice\u head
是最新的
dplyr
版本的一部分。更新
dplyr
然后它应该在测试中起作用。月份是日历月。12月12日,1月1日。