r - 如何将 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 个类别中的所有类别中都获得“否”时,他们才能在新的伞类类别中获得“否”。
提前致谢。
解决方案
我们可以使用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"
或者另一种选择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))
推荐阅读
- laravel - laravel 无法删除具有一对多关系的行
- c - 如何从文件中仅提取 2 行
- python - Python 中 Plotly Express 的连续误差带
- mysql - 在在线服务器中使用 phpmyadmin 创建数据库
- android - Android Studio apk 工作 android 9 max 但 android 10 和 11 显示此错误任何人都有解决方案
- r - 调整闪亮的代码以生成与第一个代码一样的结果
- python - 如何在不覆盖数据(使用 Pandas)和特定工作表的情况下写入现有 Excel 文件?
- node.js - 通过快递发送分块文件
- r - 在 R 中使用 for 循环遍历名称向量
- python-xarray - 如何处理 NaT/1970 日期以便 python-xarray ds.time.dt.season 工作?