我有一个数据框 util_final ,其中包含 utilization_Ratio 列,我想用它来分配分类值。
数据框具有以下结构:
$ Patient_ID : Factor w/ 3242 levels "0000001C-89D2-40FF-868D-8E1B4C8C9114",..: 1 2 3 4 5 6 7 8 9 10 ...
$ OP : num 1 11 2 1 5 6 12 8 10 6 ...
$ IP : num 2 0 0 1 1 3 4 5 0 3 ...
$ Total : num 3 11 2 2 6 9 16 13 10 9 ...
$ utilization_Ratio: num 0.667 0 0 0.5 0.167 ...
我已创建此功能以定义上述分类值:
assign_risk_factor=function(x) {
for(i in util_final$utilization_Ratio) {
if(i<0.33) {
print("Low")
} else if(i>0.67) {
print("High")
} else {
print("Medium")
}
}
}
然后我尝试使用lapply()将函数与数据框连接,将函数中定义的分类变量插入数据框的新列中:
util_final$Risk_Factor=lapply(util_final$utilization_Ratio,assign_risk_factor)
实际上,它创建了新列,但它只是插入一个&#34; NULL&#34;在列的每一行中,如下所示:
Patient_ID OP IP Total utilization_Ratio Risk_Factor
0000001C-89D2-40FF-868D-8E1B4C8C9114 0000001C-89D2-40FF-868D-8E1B4C8C9114 1 2 3 0.6666667 NULL
001B8544-508E-4CBE-A40A-EAAD97E541BE 001B8544-508E-4CBE-A40A-EAAD97E541BE 11 0 11 0.0000000 NULL
00336A6F-93D8-42F6-B2E5-A1EF12C2BD75 00336A6F-93D8-42F6-B2E5-A1EF12C2BD75 2 0 2 0.0000000 NULL
0039B0C1-E84F-4B90-AD9B-985C9F39ABD1 0039B0C1-E84F-4B90-AD9B-985C9F39ABD1 1 1 2 0.5000000 NULL
003E8473-C645-4AF2-B48A-86BE76188CC5 003E8473-C645-4AF2-B48A-86BE76188CC5 5 1 6 0.1666667 NULL
00765CEF-B05C-471F-B91F-8154E6158486 00765CEF-B05C-471F-B91F-8154E6158486 6 3 9 0.3333333 NULL
真正让我感到困惑的部分:当我运行lapply()函数时,控制台似乎显示了按预期生成的分类变量(换句话说,建议我创建的For循环工作)。但是,我的数据框的结果新列只包含NULL&#39;
谢谢!
答案 0 :(得分:3)
你的功能并没有实际返回任何东西。打印与返回相同并且您不在for循环中构建任何类型的矢量。另外,cut()
函数可以为您执行此类拆分。 <怎么样
util_final$Risk_Factor <- cut(util_final$utilization_Ratio,
breaks = c(-Inf, .33, .67, Inf),
labels = c("Low","Medium","High"))