当前位置: 首页 > 知识库问答 >
问题:

具有分组功能的数据表中多个行和列的中位数

谷梁翰飞
2023-03-14

我有一个数据表,包含90000多个观察值和1201个变量。除最后一列之外的所有列都存储数值,最后一列是包含源文件名称(超过100)的列。以下是数据表的一个小示例

library(data.table)
DT <- data.table(V1=sample(0:100,20,replace=TRUE), 
V2=sample(0:100,20,replace=TRUE), V3=sample(0:100,20,replace=TRUE), 
V4=sample(0:100,20,replace=TRUE), V5=sample(0:100,20,replace=TRUE), 
V6=sample(0:100,20,replace=TRUE), V7=sample(0:100,20,replace=TRUE), 
file=rep(c("A","B","C","D"), each = 5))

我想做的是计算每个组中ALL值的中位数(file)。例如,对于组A,中位数将从第1、2、3、4、5行一次计算出来。在下一步中,我想根据一组(预期输出如下)将中间值分配给每一行。

这个问题看起来很简单,我在谷歌上搜索过很多类似的问题,都是关于依赖于一个群体的中值/平均值的计算(< code>aggregate是最流行的解决方案之一)。然而,在所有情况下,中值计算只考虑一列。这里是7(或者在我的原始数据中是1200 ),而< code>median不接受这一点——我应该提供一个数字向量。因此,我尝试了< code>unlist、< code>aggregate、< code>dplyr包和< code>tapply包,运气好的话...

由于数据和组(即< code >文件)的数量,代码应该是非常自动和高效的...我将非常感谢你的帮助!

如果代码明显失败,则只是一个小示例

DT_median <- setDT(DT)[, DT_med := median(DT[,1:7]), by = file]

预期的结果应该如下所示:

V1  V2  V3  V4  V5  V6  V7  file DT_med
42  78  9   0   60  46  65  A    37.5
36  36  46  45  5   96  64  A    37.5
83  31  92  100 15  2   9   A    37.5
36  16  49  82  32  4   46  A    37.5
29  17  39  6   62  52  97  A    37.5
37  70  17  90  8   10  93  B    47
72  62  68  83  96  77  20  B    47
10  47  29  2   93  16  30  B    47
69  87  7   47  96  17  8   B    47
23  70  72  27  10  86  49  B    47
78  51  13  33  56  6   39  C    51
28  92  100 5   75  33  17  C    51
71  82  9   20  34  83  22  C    51
62  40  84  87  37  45  34  C    51
55  80  55  94  66  96  12  C    51
93  1   99  97  7   77  6   D    41
53  55  71  12  19  25  28  D    41
27  25  28  89  41  22  60  D    41
91  25  25  57  21  98  27  D    41
2   63  17  53  99  65  95  D    41

共有1个答案

岳英耀
2023-03-14

因为我们要计算所有值的< code >中值,按“文件”分组,< code >取消列出 data . table(< code >)的子集。SD),获取< code>median并分配(< code>:=)输出以创建新列' DT_med '

library(data.table)
DT[, DT_med := median(unlist(.SD), na.rm = TRUE), by = file]
 类似资料:
  • 假设我有5个不同的列,< code>a、b、c、d、e,我选择了多行: 例子: 用户有 3 个帖子,因此它将在查询中选择 3 行。 我想对< code>a的所有行的值求和(当然还有其余的)。 例如 值 = 4 值=10 < code >第3行 值= 1 所以我需要把所有这些加起来得到15。 我知道使用< code>array_sum($ratings)来查找数组的总和,但前提是您选择了一个可以有多

  • 问题内容: 我想在sqlalchemy中使用“分组并计数”命令。我怎样才能做到这一点? 问题答案: 关于计数的文档说,对于查询,最好使用:

  • 问题内容: 有谁知道如何在具有 多个 功能的groupby.agg()中传递参数? 最重要的是,我想将其与自定义函数一起使用,但是我将使用需要参数的内置函数来询问我的问题。 假设: 我该怎么做: 作为“分位数”的参数: 问题答案: 使用功能: 或者可以创建函数并将其名称设置为自定义列名称:

  • 目前,我创建了单独的,最后连接这些,以创建一个。 是否有优雅的或一个衬里来从数组列表和多个数组中创建df。

  • 我使用下面的程序从定义的列表中找出所有子列表。请查找以下程序 输出:: 以上程序工作正常。 我的问题是,有没有其他简单的方法来使用java 8?

  • 我试图创建一个数组或ArrayList,它包含三个独立的链表。 假设我有一个部门数组(销售、媒体、船员),每个元素都是一个循环链接的名称、标题、id和支付率。 示例: 我希望能够检索到特定链表中的节点,如部门(销售)。下一步,等等。这是我当前的代码: 另外还有两个旁注,我目前可以从最右边插入,但如何才能从最左边插入。另外,如何删除节点?我在网上看到的一切都显示删除一个只有一个值的节点,但我有多个值