R cut函数以中位数作为标签而不是界限

标签 r lapply

是否可以使用 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/

相关文章:

r - 如何在R中以一个变量为条件创建新矩阵?

r - 使用 if 条件修改 for 循环以在 R 中应用格式

r - lapply 有两个列参数

r - 将向量列表与 R 中的数据帧列表合并

r - dplyr 0.3 不能inner_join data.table?

r - 使用先前 magrittr 链的输出作为进一步参数的参数

r - 将查询包含在 R 包中

r - R更新: unable to access index for repository: internet routines cannot be loaded后无法安装软件包

rbindlist data.tables不同维度

r - 为数据帧列表中的每个数据帧中的每个列名添加前缀 R