R - 创建带有或排除的变量

R - Creating variables with an or exclusion

我有一个包含一些变量的数据集,这些变量表明老年人是否可以或不能做 activity(乘坐公共汽车、洗澡...)。 我必须创建一些变量,例如“在 C 组中,老年人需要帮助来执行 2 活动,包括洗澡。” #在D组中,年长者需要协助进行3项活动,包括洗澡和穿衣。

所以观察不能分为两组。 我的数据集是这样的:

    bathing    take_bus   dressing   eating  
1     4          4          4          3
2     2          1          3          2
3     4          2          4          2
4     5          4          1          2
5     2          4          4          1

数字表示 activity 的难度级别。我只对 4 级或更高级别感兴趣(年长的人根本无法 activity)。

所以比如这里,个体3和4在C组。个人1在D组BUT不应该在C组。 个人5不在C组,因为他可以一个人洗澡

我做了这样的事情:

df$is_C <- ifelse(df$bathing >= 4 & (df$dressing >= 4 | df$eating >= 4 |
                                                        df$take_bus >= 4), 1, 0)
df$is_C <- factor(x = df$is_C, levels = c(1, 0), labels = "Group_C", "Not_Group_C")

df$is_D <- ifelse(df$bathing >= 4 & df$dressing >= 4 & (  df$eating >= 4 | df$take_bus >= 4), 1, 0)
df$is_D <- factor(x = df$is_D, levels = c(1, 0), labels = "Group_D", "Not_Group_D")

但是当我这样做时:

 >table(df$is_C, df$is_D)
          
           Group_D Not_Group_D
  Group_C      683      290
  Not_Group_C    0     9650

所以683人在C组,应该只在D组.... (人不在C组不在D组是可以的,因为我还有其他变数)

我该怎么办??????

谢谢大家的好意和回答!

这是一个解决方案。
为了使其更具可读性,定义了两个函数,都返回逻辑值。然后将逻辑值用于 C 组和 D 组的互斥。完成后,将值强制转换为整数,然后转换为因子。

f_is_C <- function(x, level = 4) x[1] >= level && any(x[-1] >= level)
f_is_D <- function(x, level = 4) all(x[1:2] >= level) && any(x[3:4] >= level)

is_D <- apply(df, 1, f_is_D)
is_C <- apply(df, 1, f_is_C) & !is_D  # mutual exclusion

df$is_C <- factor(as.integer(is_C), levels = 1:0, labels = c("Group_C", "Not_Group_C"))
df$is_D <- factor(as.integer(is_D), levels = 1:0, labels = c("Group_D", "Not_Group_D"))

with(df, table(is_C, is_D))
#             is_D
#is_C          Group_D Not_Group_D
#  Group_C           0           2
#  Not_Group_C       1           2