【发布时间】:2016-05-26 17:37:19
【问题描述】:
library(OptimalCutpoints)
library(dplyr)
这是一个测试数据:
set.seed(123)
df<-data.frame(label=rbinom(1000,size=1,prob=0.5),score=rnorm(1000),type=sample(c("A","B","C","D"),1000,replace=TRUE))
使用 group_by 对“类型”进行分组,并希望使用 library(OptimalCutpoints) 中的 optimization.cutpoints 函数进行总结
df%>%group_by(type)%>%summarize(Opt_cut=optimal.cutpoints(X = "score", status = "label", tag.healthy = 0, methods = "MaxSpSe",data=df[,1:2]))
我得到了这个:
Error: expecting a single value
我可以得到这样的解决方法,提取每个“类型”并分别运行 optimize.cutpoints:
df_A<-df%>%filter(grepl("A",type))
opt.cut.df.A <- optimal.cutpoints(X = "score", status = "label", tag.healthy = 0, methods = "MaxSpSe", data = df_A)
从 opt.cut.df.A 我可以像这样提取最佳截止:
opt.cut.df.A[1]$MaxSpSe$Global$optimal.cutoff$cutoff
但这绝对不是最好的方式,尤其是。有大量的“类型” 除非我遗漏了什么,否则 summarise 似乎只适用于单个输出函数。
问题:如何在summary中使用optimal.cutpoints或类似函数?
【问题讨论】:
-
该函数输出一个嵌套列表,而
summarize并不期望这样。你只想要一个切割点吗? -
嗨皮埃尔,在这种情况下是的......但我的一般问题是如何总结具有在 dplyr 中输出 >1 值的函数的组。我认为下面 Psidom 的应用拆分解决方案效果很好!在这种情况下,也许 dplyr 不是最好的方法。
-
我使用了
data.table,速度非常快。我试过dplyr,但找不到方法 -
summarize可以输出列表列,可以通过 tidyrunnest取消嵌套。有关summarize和列表列的示例,请参阅here。但是,您的特定案例/功能似乎无法正常工作 - 我收到关于 dimnames 长度不等于数组范围的错误... -
@StevenBeaupré 啊是的......这里是新手......不知道那个选项。谢谢。我发现 data.table 解决方案最简单......主要是因为我对 purr 不太熟悉。