是否可以使用 R 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 正在使用的数据帧部分(因为每个向量都有不同的最小值和最大值)。有更简单的方法吗?
最佳答案
你的尝试已经不远了。
关键是在lapply
中你可以定义一个自定义函数。使用此功能可以为列表中的每个数据框创建自定义标签。
您希望将五分位数的中位数作为标签。您可以通过将 quantile
函数与 0.1, 0.3, 0.5, 0.7, 0.9
(五分位数的中位数)等序列结合使用来实现此目的:
quants <- seq(0.1, 1, by = 0.2)
hists <- lapply(data, function(x) cut(x, 5, labels=quantile(x, quants)))
注意:如果您想要 100 个中断而不是 5 个,只需将 quants 更改为 seq(0.005, 1, by = 0.01)
并更改 中的
到 5
cut()100
PS:永远不要在 R
中使用 data
作为名称,因为名称 data
实际上已经为 R 中的其他内置事物保留了R
。而是使用 df
左右。
关于R cut函数以中位数作为标签而不是界限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46309683/