R cut函数的中位数为标签而不是边界

时间:2017-09-19 21:00:01

标签: r lapply

是否可以使用R cut()函数将中值作为标签而不是cut" bin"?

这是我目前的代码:

> hists <- lapply(data, cut, 100)
> table <- lapply(hists, table)
> head(table$V2)

(0.442,0.892]   (0.892,1.3]    (1.3,1.71]   (1.71,2.12]   (2.12,2.53] 
            1             4             5             7            17 

我想要的是:

 > head(table$V2)

0.667   1.096    1.505   1.915   2.325 
   1       4       5       7       17 

我尝试过类似的事情:

hists <- lapply(data, cut, 100, labels=(max(x)-min(x))/100)

但不知道如何指定lapply使用的数据帧部分(因为每个向量具有不同的最小值和最大值)。有没有更简单的方法呢?

1 个答案:

答案 0 :(得分:4)

你的尝试并不遥远。

关键是在java.security.NoSuchProviderException: JCE cannot authenticate the provider BC 内你可以定义一个自定义函数。使用此功能可为列表中的每个数据框创建自定义标签。

您希望将五分位数的中位数作为标签。您可以通过将lapply函数与类似quantile的序列结合使用来实现此目的,这些序列是您的五分位数的中位数:

0.1, 0.3, 0.5, 0.7, 0.9

注意:如果您想要100次休息而不是5次,只需更改为quants <- seq(0.1, 1, by = 0.2) hists <- lapply(data, function(x) cut(x, 5, labels=quantile(x, quants))) 并将seq(0.005, 1, by = 0.01)更改为5

PS:永远不要在cut()中使用100作为名称,因为名称data实际上已经为R中的其他内置内容保留了。而是使用data左右。