我有一个关于几年内在同一份问卷中回答了两次的患者的数据。
现在我需要计算有多少患者出现了问题,有多少患者得到了改善,有多少患者仍然有问题。答案在1-6级,其中<3不是问题,3-4.75有时是问题,>= 5是问题。
我已经将这两个数据帧合并为一个,并尝试通过编码来计算差异
dat5$noproblem = ((dat5$sleepProblems.x)<3)-((dat5$sleepProblems.y)<3)但我只得到了一个数据帧,它是0和负1,维度是空的。我试着用同样的方法
diff((dat5$sleepProblems.x<3) - lag((dat5$sleepProblems.y<3))) 但我仍然只得到不同值的列表。
我怎样才能得到病人的数量?
(抱歉,描述不清楚)
编辑:请注意,为了保护个人隐私,组织从实数更改为x
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")发布于 2019-11-22 17:48:35
下面是一个基本的R解决方案:
# 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<3,kpi>= 5和3=<kpi<5,这与你的不同,因为它也适用于4.75<x<5,在你的问题中没有指定如何处理这个范围。
要获取组中的数字,有许多方法,一种是(在本例中是一个组,根据数据)在前面的代码之后执行此操作:
table(dat5$noproblem)
no problem
5发布于 2019-11-22 17:53:12
或者(按照@s_t的建议定义kpi ),您可以使用dplyr::case_when编写代码,如下所示:
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语句中:
dat5 <- dat5 %>%
mutate(kpi = sleepProblems.x - sleepProblems.y,
noproblem = case_when(
kpi < 3 ~ "no problem",
kpi >= 5 ~ "problem",
TRUE ~ "sometimes problem"
)
)https://stackoverflow.com/questions/58991351
复制相似问题