我需要根据另一列(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")
Run Code Online (Sandbox Code Playgroud)
所以数据看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
我想获得一个新的行与列的中位数MITTELWERT为每一个独特CHGNR和METHODE只为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"
...
Run Code Online (Sandbox Code Playgroud)
谢谢你的任何提示!
这可以通过实现library(data.table).
library(data.table)
# Create data here ----
data <- data.table(data) # Converts to data set
crunchedData <- data[SEQ > 1,
j = .(SEQ = ">1",MITTELWERT = median(MITTELWERT) ),
by = .(CHGNR,METHODE)]
Run Code Online (Sandbox Code Playgroud)
在这里,您可以rbind crunchedData在data使用的任何值DATUM和PROBE你喜欢的.
如果你不熟悉data.table,第一个参数(i)采用逻辑(类似于数据帧)按行子集.j填充了列式操作(其中每列可以通过其列名称引用)和by(或者k,如果您愿意)定义要按行分组的组.