首页 > 解决方案 > 如何将 6 个分类(是/否)变量组合成 1 个伞形分类变量(是/否)

问题描述

我有一个像下面这样的数据集:

bleed  breathing  ascites   spleen  Hepato
Yes      Yes         No       Yes    No
No       Yes         No       Yes    No
No       No          Yes      Yes    No

我需要创建一个描述 5 个分类变量的新伞形变量。只要患者在 5 个分类变量中的任何一个中有“是”(并发症),他/她就应该在新的总括变量中获得“是”(即它们属于新类别)。只有当此人在 5 个类别中的所有类别中都获得“否”时,他们才能在新的伞类类别中获得“否”。

提前致谢。

标签: rcategorical-data

解决方案


我们可以使用rowSums逻辑matrix来获得每个 TRUE/FALSE 结果的总和。创建一个逻辑向量> 0,向其添加 1,以便 TRUE/FALSE 转换为 2/1,这可以用作索引以替换为新值的向量(“否”、“是”)

df1$umbrella <- c("No", "Yes")[(rowSums(df1 == "Yes") > 0) + 1]
df1$umbrella
#[1] "Yes" "Yes" "Yes"

或者另一种选择Reducelapply

df1$umbrella <- c("No", "Yes")[(Reduce(`|`, lapply(df1, `==`, "Yes"))) + 1]

或与apply

c("No", "Yes")[1 + apply(df1 == "Yes", 1, FUN = any)]

数据

df1 <- structure(list(bleed = c("Yes", "No", "No"), breathing = c("Yes", 
"Yes", "No"), ascites = c("No", "No", "Yes"), spleen = c("Yes", 
"Yes", "Yes"), Hepato = c("No", "No", "No")), class = "data.frame", 
row.names = c(NA, 
-3L))

推荐阅读