如何将6个类别变量(是/否)合并为1个伞状类别变量(是/否)

时间:2020-06-25 20:56:12

标签: r categorical-data

我有一个类似以下示例的数据集:

tapply(example$Similarity, example[1:2], FUN = I)

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

谢谢。

1 个答案:

答案 0 :(得分:2)

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

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))