r - 将虚拟变量转换为分类变量
问题描述
这是我的数据框
data<-data.frame(
ID=c(1:8),
Diag1=c(1,0,1,0,1,0,1,0),
Diag2=c(0,1,0,1,0,0,1,0),
Diag3=c(0,0,0,1,0,1,1,0),
Multiple.Diag=c(0,0,1,1,0,0,1,0)
)
我有不同诊断的患者,其中一些有多种诊断。这些诊断是虚拟变量,需要转换为分类变量。如果病人有Mult.diag==1
,他的诊断将是Multiple.diag
,否则他的诊断将是Diag1
,Diag2
或者Diag3
。如果患者的所有变量都为 0,则诊断结果为"Other"
。
这是我想要的:
ID Diagnosis
1 1 Diag1
2 2 Diag2
3 3 Multiple.Diag
4 4 Multiple.Diag
5 5 Diag1
6 6 Diag3
7 7 Multiple.Diag
8 8 Other
解决方案
您可以apply()
像这样使用内置功能。您可以将结果添加到原始data
数据或保存在新数据框中。该函数myfunc
根据您提到的方向提取变量的名称进行处理。这里的代码:
#Code
myfunc <- function(x)
{
y <- names(x)[max(which(x==1))]
if(is.na(y))
{
y <- 'Others'
}
return(y)
}
#Add var
data$Var <- apply(data[,-1],1,myfunc)
输出:
ID Diag1 Diag2 Diag3 Multiple.Diag Var
1 1 1 0 0 0 Diag1
2 2 0 1 0 0 Diag2
3 3 1 0 0 1 Multiple.Diag
4 4 0 1 1 1 Multiple.Diag
5 5 1 0 0 0 Diag1
6 6 0 0 1 0 Diag3
7 7 1 1 1 1 Multiple.Diag
8 8 0 0 0 0 Others
推荐阅读
- laravel - 是否可以在 Laravel Blade 中制作哈希 MD5?
- android - 如何实现媒体会话以支持谷歌助手
- c# - 如何将2个列表中的元素添加到第三个?
- apache - 阻止访问子文件夹,将所有通配符子文件夹重定向到同名子域
- azure - 在 azure devops 中上传字幕和视频
- email - 为什么 Sieve 在 base64 主题行上表现异常?
- java - Springboot中Flyway时的Java API调用
- javascript - 启动机器人时出现“Client.js”错误和 Sqlite 错误
- io - I/O 系统,计算周期寄存器和预分频值
- javascript - 通过变量更改嵌入文本