我想获得定制子集中的分位数.例如,在以下数据集中:

data = data.table(x=c(rep(1,9),rep(2,9)),y=c(rep(1:6,each=3)),z=1:18)
  1. 对于每一行i,我想知道,在x=x[i]y=<y[i]行中,z[i]的50%分位数(以及进一步计算中的其他分位数,例如10%分位数、5%分位数).

预期输出为

c(2,2,2,3.5,3.5,3.5,5,5,5,11,11,11,12.5,12.5,12.5,14,14,14)
  1. 对于每行i,我想知道,在x=x[i]y=<y[i]行中,z[i]的平均值.

预期输出为 (same as 1 in this dataset, but would be different in other datasets).

c(2,2,2,3.5,3.5,3.5,5,5,5,11,11,11,12.5,12.5,12.5,14,14,14)

我可以为它编写一个函数,并使用apply在每一行上循环它.然而,数据集有30000000多行,这需要几天的时间.在R数据中,有没有更快的方法来计算它.餐桌、提袋或其他包装?

推荐答案

data.table中使用非等联接

data[data, quantile(z, 0.5), on = .(x = x, y <=y), by = .EACHI]$V1
#[1]  2.0  2.0  2.0  3.5  3.5  3.5  5.0  5.0  5.0 11.0 11.0 11.0 12.5 12.5 12.5 14.0 14.0 14.0

如果要创建列

data[data[unique(data[, .(x, y)]), quantile(z, 0.5), 
  on = .(x = x, y <=y), by = .EACHI], z_mean := V1, on = .(x, y)]

-输出

> data
        x     y     z z_mean
    <num> <int> <int>  <num>
 1:     1     1     1    2.0
 2:     1     1     2    2.0
 3:     1     1     3    2.0
 4:     1     2     4    3.5
 5:     1     2     5    3.5
 6:     1     2     6    3.5
 7:     1     3     7    5.0
 8:     1     3     8    5.0
 9:     1     3     9    5.0
10:     2     4    10   11.0
11:     2     4    11   11.0
12:     2     4    12   11.0
13:     2     5    13   12.5
14:     2     5    14   12.5
15:     2     5    15   12.5
16:     2     6    16   14.0
17:     2     6    17   14.0
18:     2     6    18   14.0

R相关问答推荐

使用scale_x_continuous复制ggplot 2中的离散x轴

如果索引重复,聚合xts核心数据

如何使用R Shiny中的条件面板仅隐藏和显示用户输入,同时仍允许运行基础计算?

将年度数据插入月度数据

手动打印线型gplot

如何将移除事件分配给动态创建的按钮?

条形图和在Ploly中悬停的问题

合并DFS列表并将索引提取为新列

如何提取所有完美匹配的10个核苷酸在一个成对的匹配与生物字符串在R?>

以字符格式导入的ExcelElectron 表格日期列标题

在保留列表元素属性的同时替换列表元素

我如何go 掉盒子图底部的数字?

将数据集旋转到长格式,用于遵循特定名称模式的所有变量对

为什么这个表格格罗布不打印?

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

重写时间间隔模糊连接以减少内存消耗

从两个数据帧中,有没有办法计算R中一列的唯一值?

如何创建直方图与对齐的每月箱?

使用卡环从R中的列中删除单位(&C)

R:部分修改矩阵对角线的有效方法