我有一个类似以下示例的数据集:
tapply(example$Similarity, example[1:2], FUN = I)
我需要创建一个描述5个类别变量的新的伞形变量。只要患者在5个分类变量中的任何一个中具有“是”(并发症),他/她就应该在新的伞形变量中得到“是”(即它们属于新类别)。仅当此人在所有5个类别中都获得“否”时,他们在新的总括类别中才获得“否”。
谢谢。
答案 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"
或者另一个选择是Reduce
和lapply
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))