首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算R中的患者数量

计算R中的患者数量
EN

Stack Overflow用户
提问于 2019-11-22 17:38:03
回答 2查看 75关注 0票数 0

我有一个关于几年内在同一份问卷中回答了两次的患者的数据。

现在我需要计算有多少患者出现了问题,有多少患者得到了改善,有多少患者仍然有问题。答案在1-6级,其中<3不是问题,3-4.75有时是问题,>= 5是问题。

我已经将这两个数据帧合并为一个,并尝试通过编码来计算差异

代码语言:javascript
复制
dat5$noproblem = ((dat5$sleepProblems.x)<3)-((dat5$sleepProblems.y)<3)

但我只得到了一个数据帧,它是0和负1,维度是空的。我试着用同样的方法

代码语言:javascript
复制
diff((dat5$sleepProblems.x<3) - lag((dat5$sleepProblems.y<3))) 

但我仍然只得到不同值的列表。

我怎样才能得到病人的数量?

(抱歉,描述不清楚)

编辑:请注意,为了保护个人隐私,组织从实数更改为x

代码语言:javascript
复制
structure(list(Organisation = c("XXX", "XXX", "XXX", 
"XXX", "XXX"), VAR066_1 = c(3L, 2L, 3L, 3L, 2L), VAR066_3 = c(3L, 
2L, 5L, 2L, 2L), VAR066_5 = c(3L, 4L, 5L, 3L, 2L), VAR066_6 = c(2L, 
2L, 5L, 2L, 2L), sleepProblems.x = c(2.75, 2.5, 4.5, 2.5, 2), 
    VAR074_1 = c(3L, 2L, 3L, 3L, 3L), VAR074_3 = c(2L, 2L, 4L, 
    3L, 4L), VAR074_5 = c(2L, 2L, 3L, 3L, 3L), VAR074_6 = c(3L, 
    2L, 3L, 2L, 3L), sleepProblems.y = c(2.5, 2, 3.25, 2.75, 
    3.25), sleepingproblems = c(0L, 0L, 0L, 0L, 1L), noproblem = c(0L, 
    0L, 0L, 0L, 1L)), row.names = c(NA, 5L), class = "data.frame")
EN

回答 2

Stack Overflow用户

发布于 2019-11-22 17:48:35

下面是一个基本的R解决方案:

代码语言:javascript
复制
# first you calculate the kpi that defines if it's problem or not
dat5$kpi <- dat5$sleepProblems.x - dat5$sleepProblems.y
# second you can use ifelse to see if there is problem or not
dat5$noproblem <- ifelse(dat5$kpi < 3,"no problem", 
                         ifelse(dat5$kpi >= 5, "problem","sometimes problem"))

  Organisation VAR066_1 VAR066_3 VAR066_5 VAR066_6 sleepProblems.x VAR074_1 VAR074_3 VAR074_5 VAR074_6 sleepProblems.y sleepingproblems
1          XXX        3        3        3        2            2.75        3        2        2        3            2.50                0
2          XXX        2        2        4        2            2.50        2        2        2        2            2.00                0
3          XXX        3        5        5        5            4.50        3        4        3        3            3.25                0
4          XXX        3        2        3        2            2.50        3        3        3        2            2.75                0
5          XXX        2        2        2        2            2.00        3        4        3        3            3.25                1
   noproblem   kpi
1 no problem  0.25
2 no problem  0.50
3 no problem  1.25
4 no problem -0.25
5 no problem -1.25

注意:我的ifelse考虑的范围是kpi<3kpi>= 53=<kpi<5,这与你的不同,因为它也适用于4.75<x<5,在你的问题中没有指定如何处理这个范围。

要获取组中的数字,有许多方法,一种是(在本例中是一个组,根据数据)在前面的代码之后执行此操作:

代码语言:javascript
复制
table(dat5$noproblem)
no problem 
         5
票数 1
EN

Stack Overflow用户

发布于 2019-11-22 17:53:12

或者(按照@s_t的建议定义kpi ),您可以使用dplyr::case_when编写代码,如下所示:

代码语言:javascript
复制
dat5$kpi <- dat5$sleepProblems.x - dat5$sleepProblem.y
dat5 <- dat5 %>%
  mutate(noproblem = case_when(
         kpi < 3 ~ "no problem",
         kpi >= 5 ~ "problem",
         TRUE ~ "sometimes problem"
   )
)

或者将所有内容“包装”到mutate语句中:

代码语言:javascript
复制
dat5 <- dat5 %>%
  mutate(kpi = sleepProblems.x - sleepProblems.y,
         noproblem = case_when(
         kpi < 3 ~ "no problem",
         kpi >= 5 ~ "problem",
         TRUE ~ "sometimes problem"
   )
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58991351

复制
相关文章

相似问题

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