【发布时间】:2016-12-05 13:07:27
【问题描述】:
我需要根据另一列 (SEQ) 获取行的中值。让我根据示例数据为您解释一下:
data <- structure(list(DATUM = structure(c(1335558400, 1335558400, 1335558400,
1335558400, 1335562429, 1335562429, 1335562429, 1335562429, 1335562429,
1335562429, 1335562429, 1335562429, 1335562429, 1335562429, 1335562429,
1335567274, 1335567274, 1335567274, 1335567274, 1335567274, 1335567274,
1335567274, 1335567274, 1335567274, 1335567274, 1335567274, 1335681543,
1335681543, 1335681543, 1335681543), class = c("POSIXct", "POSIXt"
)), CHGNR = c(200028, 200028, 200028, 200028, 200029, 200029,
200029, 200029, 200029, 200029, 200029, 200029, 200029, 200029,
200029, 200029, 200029, 200029, 200029, 200029, 200029, 200029,
200029, 200029, 200029, 200029, 200057, 200057, 200057, 200057
), SEQ = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 2L, 2L,
2L
), PROBE = c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 1, 2, 2,
2
), METHODE = c("a", "a", "b", "b", "a", "a", "a", "a", "a", "b", "b", "b", "b", "a", "a",
"a", "a", "a", "a", "b", "b", "b", "b", "b", "b", "a", "a", "a", "b", "b"
),MITTELWERT = c(2.5,1.67, 0, 0, 0.5, 0.333333333333333, 0.5, 0, 0, 0, 0,
0, 5, 0, 0.833333333333333, 0, 0, 0, 0, 0, 0.5, 1, 0, 0,
0, 0.5, 0.666666666666667,1, 0, 0)
), .Names = c("DATUM", "CHGNR", "SEQ","PROBE","METHODE", "MITTELWERT"),
row.names = c(NA,30L), class = "data.frame")
所以数据看起来像这样:
DATUM CHGNR SEQ PROBE METHODE MITTELWERT
1 2012-04-27 22:26:40 200028 1 1 a 2.5000000
2 2012-04-27 22:26:40 200028 1 1 a 1.6700000
3 2012-04-27 22:26:40 200028 1 1 b 0.0000000
4 2012-04-27 22:26:40 200028 1 1 b 0.0000000
5 2012-04-27 23:33:49 200029 1 1 a 0.5000000
6 2012-04-27 23:33:49 200029 1 1 a 0.3333333
7 2012-04-27 23:33:49 200029 2 2 a 0.5000000
8 2012-04-27 23:33:49 200029 2 2 a 0.0000000
9 2012-04-27 23:33:49 200029 2 2 a 0.0000000
10 2012-04-27 23:33:49 200029 2 2 b 0.0000000
11 2012-04-27 23:33:49 200029 2 2 b 0.0000000
12 2012-04-27 23:33:49 200029 2 2 b 0.0000000
13 2012-04-27 23:33:49 200029 2 2 b 5.0000000
14 2012-04-27 23:33:49 200029 2 2 a 0.0000000
15 2012-04-27 23:33:49 200029 2 2 a 0.8333333
16 2012-04-28 00:54:34 200029 3 2 a 0.0000000
17 2012-04-28 00:54:34 200029 3 2 a 0.0000000
18 2012-04-28 00:54:34 200029 3 2 a 0.0000000
19 2012-04-28 00:54:34 200029 3 2 a 0.0000000
20 2012-04-28 00:54:34 200029 3 2 b 0.0000000
21 2012-04-28 00:54:34 200029 3 3 b 0.5000000
22 2012-04-28 00:54:34 200029 3 3 b 1.0000000
23 2012-04-28 00:54:34 200029 3 3 b 0.0000000
24 2012-04-28 00:54:34 200029 3 3 b 0.0000000
25 2012-04-28 00:54:34 200029 3 3 b 0.0000000
26 2012-04-28 00:54:34 200029 3 3 a 0.5000000
27 2012-04-29 08:39:03 200057 1 1 a 0.6666667
28 2012-04-29 08:39:03 200057 2 2 a 1.0000000
29 2012-04-29 08:39:03 200057 2 2 b 0.0000000
30 2012-04-29 08:39:03 200057 2 2 b 0.0000000
我想为每个唯一的CHGNR 和 METHODE 获得一个 新行 列的中位数为 MITTELWERT 并且仅适用于 SEQ > 1 (+ DATUM 和 PROBE 列的第一个值)。因此,在此示例数据中,它看起来像这样:
DATUM CHGNR SEQ PROBE METHODE MITTELWERT
1 2012-04-27 22:26:40 200028 1 1 a 2.5000000
2 2012-04-27 22:26:40 200028 1 1 a 1.6700000
3 2012-04-27 22:26:40 200028 1 1 b 0.0000000
4 2012-04-27 22:26:40 200028 1 1 b 0.0000000
5 2012-04-27 23:33:49 200029 1 1 a 0.5000000
6 2012-04-27 23:33:49 200029 1 1 a 0.3333333
7 2012-04-27 23:33:49 200029 2 2 a 0.5000000
8 2012-04-27 23:33:49 200029 2 2 a 0.0000000
9 2012-04-27 23:33:49 200029 2 2 a 0.0000000
10 2012-04-27 23:33:49 200029 2 2 b 0.0000000
11 2012-04-27 23:33:49 200029 2 2 b 0.0000000
12 2012-04-27 23:33:49 200029 2 2 b 0.0000000
13 2012-04-27 23:33:49 200029 2 2 b 5.0000000
14 2012-04-27 23:33:49 200029 2 2 a 0.0000000
15 2012-04-27 23:33:49 200029 2 2 a 0.8333333
16 2012-04-28 00:54:34 200029 3 2 a 0.0000000
17 2012-04-28 00:54:34 200029 3 2 a 0.0000000
18 2012-04-28 00:54:34 200029 3 2 a 0.0000000
19 2012-04-28 00:54:34 200029 3 2 a 0.0000000
20 2012-04-28 00:54:34 200029 3 2 b 0.0000000
21 2012-04-28 00:54:34 200029 3 3 b 0.5000000
22 2012-04-28 00:54:34 200029 3 3 b 1.0000000
23 2012-04-28 00:54:34 200029 3 3 b 0.0000000
24 2012-04-28 00:54:34 200029 3 3 b 0.0000000
25 2012-04-28 00:54:34 200029 3 3 b 0.0000000
26 2012-04-28 00:54:34 200029 3 3 a 0.5000000
27 2012-04-27 23:33:49 200029 >1 2 a 0.0000000 #new calculated row with median value for unique CHGNR and METHODE "a"
28 2012-04-27 23:33:49 200029 >1 2 b 0.0000000 #new calculated row with median value for unique CHGNR and METHODE "b"
...
感谢您的任何提示!
【问题讨论】:
-
对于您提供的测试数据,这些中位数值是否正确?因为我看到 SEQ==a 和 SEQ==b 的 CHGNR==200029 的中位数(MITTELWERT)为零
-
它应该是 CHGNR == 200029 和 SEQ > 1 和 METHODE == a /或 METHODE == b 的中值(MITTELWERT),但是是的,你是对的,我的错,我计算错了这个例子
-
不要成为一个坚持者,但对于 median 与 mean 不同的数据集,您使用
Mittelwert=median()是错误的——这个词意味着mean()。 -
嗨,德克,不是真的。整列实际上是测试方法(prufmethode)的平均值。中值用于汇总 seq >1 的平均值。
标签: r