如何获得每对有间隔的行的中位数

一世

我有一个看起来像这样的数据

df <- structure(list(time = c(1L, 1L, 1L, 1L, 1L, 1L, 5L, 5L, 5L, 5L, 
5L, 5L), grp = c("A", "B", "C", "D", "E", "F", "A", "B", "C", 
"D", "E", "F"), `02` = c(36034L, 63763L, 51432L, 65100L, 61444L, 
71012L, 266610L, 389787L, 47659L, 63156L, 84593L, 84331L), `03` = c(45632L, 
66505L, 60360L, 36685L, 107551L, 53360L, 323952L, 344944L, 69601L, 
51268L, 130665L, 59704L), `04` = c(59025L, 52837L, 68571L, 35788L, 
75262L, 66601L, 424683L, 340948L, 79487L, 42809L, 95607L, 81739L
), `05` = c(74767L, 48210L, 70972L, 67705L, 85576L, 89265L, 393380L, 
306633L, 77816L, 73611L, 106317L, 116890L), `06` = c(50846L, 
37970L, 63896L, 78296L, 81216L, 62308L, 62613L, 21770L, 80955L, 
88832L, 97586L, 68345L), `07` = c(26688L, 27830L, 17010L, 54074L, 
26727L, 31109L, 24448L, 38701L, 17378L, 46327L, 25324L, 25325L
), `08` = c(16498L, 26604L, 41201L, 38417L, 43709L, 33217L, 69943L, 
80638L, 37444L, 31701L, 46781L, 31152L), `09` = c(16272L, 24485L, 
14546L, 74756L, 28193L, 770L, 72238L, 78418L, 9161L, 48618L, 
26466L, 1078L), `10` = c(20612L, 713L, 18114L, 57872L, 25684L, 
27985L, 73618L, 1770L, 11953L, 33347L, 25824L, 25860L), `11` = c(23549L, 
856L, 32854L, 42906L, 33385L, 26218L, 88509L, 62103L, 23377L, 
29738L, 33504L, 26642L)), .Names = c("time", "grp", "02", "03", 
"04", "05", "06", "07", "08", "09", "10", "11"), row.names = c(NA, 
12L), class = "data.frame")

我想得到前两行的中位数,然后是后两行......但这并不容易

我想获得两行的中位数,当时间为 1 并且 grp 为 A 和 B (对于第 3 到 6 列)。

然后得到时间为 1 且 grep 为 C 和 D 时的平均值(对于第 3 到 6 列)

然后得到时间为1且grep为E和F时的平均值(对于3到6的列)

然后在时间为 5 或任何时间时执行相同的操作

我认为它可以通过首先忽略第 1 列和第 2 列df[,-c(1,2)]然后使用行1然后通过基于第 1 列的 Tapply 来完成,我不知道如何继续

apply(df[,-c(1,2)], 1, function(x) tapply(x, df[,1], median))

如果我这样做,它会给我两个不好的值

apply(df[1:2,3:6], 1, median)
      1       2 
52328.5 58300.0 

我尝试制作一个示例输出

预期输出如下(为此我在 xls 中使用了 Median 函数)

time    median  2 to 5  6 to 7  8 to 11
1        A,B    55931   32900   18555
1        C,D    62730   58985   39809
1        E,F    73137   46708.5 28089
5        A,B    342946  184623  72928
5        C,D    66378.5 63641   30719.5
5        E,F    90100   46835   26554

时间很清楚

中位数显示在哪些行之间

2 到 5 是第 2、3、4 和 5 列的中位数

6 到 7 是第 6 列和第 7 列的中位数

8 到 11 是第 8、9、10 和 11 列的中位数

奥尼亚布

首先创建一个拆分因子,用于将数据拆分为 2 行:我在这里使用了一般视图。但是对于这些数据,您可以做,rep(1:nrow(dat),each=2)尽管我包含了其他内容以概括代码。

然后使用此操作您的数据如下:

 splitfactor=rep(1:ceiling(nrow(dat)),each=2,length=nrow(dat))
 dataused=list(3:6,7:8,9:12)
 grp=do.call(rbind,by(dat[1:2],splitfactor,function(x) cbind(x[1,1],paste0(x[,2],collapse = ","))))  
 medians=sapply(dataused,function(x)by(dat[,x],splitfactor,function(m)median(unlist(m))))
 data.frame(grp,medians)
      X1  X2     X3.6    X7.8   X9.12
    1  1 A,B  55931.0 32900.0 18555.0
    2  1 C,D  62730.0 58985.0 39809.0
    3  1 E,F  73137.0 46708.5 28089.0
    4  5 A,B 342946.0 31574.5 72928.0
    5  5 C,D  66378.5 63641.0 30719.5
    6  5 E,F  90100.0 46835.0 26554.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有间隔的jQuery AJAX

来自分类Dev

如何使用带有间隔的FFMPEG创建动画GIF?

来自分类Dev

具有间隔的循环停止动作

来自分类Dev

没有NA的情况下如何计算中位数?

来自分类Dev

如何在Redshift中获得窗口化运行中位数?

来自分类Dev

如何有效地计算跑步中位数

来自分类Dev

如何将具有间隔值的数组放入数据帧中?

来自分类Dev

确定所有间隔是否重叠

来自分类Dev

如何获得箱图中每个中位数的值?

来自分类Dev

如何在Material-UI中添加带有间隔属性的Button的边距?

来自分类Dev

如何获得特定列的中位数

来自分类Dev

如何获得价格中位数?

来自分类Dev

我如何获得条件中R中多列的中位数(根据另一列)

来自分类Dev

我如何才能获得嵌套字典并找到值的中位数而无需导入任何模块?

来自分类Dev

如果数字之间有间隔并且以随机顺序排列,如何重置计数?

来自分类Dev

如何获得上一年的中位数价格?

来自分类Dev

根据姓名和时间获得中位数

来自分类Dev

如何获得中位数或平均值并进行切分

来自分类Dev

如何指示我想要满足条件的所有间隔中具有最低值的间隔

来自分类Dev

我如何获得每列的中位数和标准差?

来自分类Dev

确定所有间隔是否重叠

来自分类Dev

带有间隔的jQuery AJAX

来自分类Dev

如何使用带有间隔的FFMPEG创建动画GIF?

来自分类Dev

数组Matlab的行的中位数

来自分类Dev

如何获得所有列的每三个行间隔的中位数?

来自分类Dev

计算具有间隔的每一行的平均值

来自分类Dev

如何创建具有间隔的可观察对象

来自分类Dev

如何从numpy获得中位数的函数?

来自分类Dev

如何仅考虑特定行来计算分组的中位数

Related 相关文章

热门标签

归档