r - R DataTable 将数据转换为均值和分位数
问题描述
data = data.frame(a = runif(100), b = runif(100), c = runif(100), d = runif(100))
如果我希望转换为所有 a、b、c 和 d 的平均值,我可以这样做:
setDT(data)
dataMEAN <- data[, lapply(.SD, mean)]
但是,如果我正在寻找平均值和分位数,例如
quantile(data$a, probs=c(.10,.90))
如何在 data.table 中一次完成所有这些并填写这样的 data.table:
解决方案
我们可以melt
将数据以'long'格式,按'variable'分组,得到mean
a list
,与list
创建的列连接quantile
library(data.table)
out <- melt(setDT(data))[, c(list(MEAN = mean(value)),
as.list(quantile(value, probs = c(.10, .90)))), variable]
out
# variable MEAN 10% 90%
#1: a 0.4903088 0.04842401 0.8790265
#2: b 0.4890356 0.11788974 0.9221995
#3: c 0.4890958 0.12364468 0.8670124
#4: d 0.4638097 0.06690734 0.9448844
setnames(out, 3:4, c('LOWER', 'UPPER'))
或使用setNames
内melt
melt(setDT(data))[, c(list(MEAN = mean(value)),
setNames(as.list(quantile(value, probs = c(.10, .90))),
c('LOWER', 'UPPER'))), variable]
推荐阅读
- python - 如何从具有多个 JSON 行的 JSON 文件中的选择对象创建 python 字典(键:值)
- asp.net-identity - IdentityServer4 + ASP.NET 身份用户管理
- regex - 我想使用正则表达式在 sublime text 3 中的同一位置替换每个文件中的不同单词
- amazon-web-services - 为什么我的 AWS ECS 应用程序需要“奇怪”的 TCP 端口才能从 ECR 中提取?
- android - 如何在 Appcelerator 中为详细的图像着色?
- windows - Send a key-code to a running application in windows
- bootstrap-4 - BS 颜色类别的上下文颜色命名不一致
- c# - 在表格渲染之前将行标记为选中
- javascript - 使用 js 对 API 调用响应进行排序
- r - 删除满足条件的 2 个连续行