R - lapply()返回数据框中的空值

时间:2015-11-30 03:27:01

标签: r

我有一个数据框 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;

谢谢!

1 个答案:

答案 0 :(得分:3)

你的功能并没有实际返回任何东西。打印与返回相同并且您不在for循环中构建任何类型的矢量。另外,cut()函数可以为您执行此类拆分。 <怎么样

util_final$Risk_Factor <- cut(util_final$utilization_Ratio, 
    breaks = c(-Inf, .33, .67, Inf), 
    labels = c("Low","Medium","High"))