【发布时间】:2015-11-30 03:27:01
【问题描述】:
我有一个数据框,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)
这确实创建了新列,但它只是在列的每一行中插入一个“NULL”,如下所示:
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。
谢谢!
【问题讨论】:
-
不要使用
print(这是为了显示目的)。而是将"Low"、"High"和"Medium"分配给一个变量,然后在函数assign_risk_factor的末尾分配return()这个变量。 -
您实际上正在运行两个循环:一个为每个
util_final$utilization_Ratio值使用 lapply,另一个 for 循环在您每次调用assign_risk_factor时重复该过程。我无法说出努力的目标是什么。当努力的目标没有用自然语言清楚地描述时,说你遇到困难通常是不明智的。 -
谢谢你们!在 R 中,循环对我来说仍然是一个相对较新的概念,因此您可以看到我有很多东西要学习。
标签: r