是否可以使用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使用的数据帧部分(因为每个向量具有不同的最小值和最大值)。有没有更简单的方法呢?
答案 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
左右。