R:特定值行的中值

Mal*_*l_a 2 r

我需要根据另一列(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为每一个独特CHGNRMETHODE只为SEQ> 1(+列的第一个值DATUMPROBE).因此,在此示例数据中,它看起来像这样:

                 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)

谢谢你的任何提示!

T.H*_*lme 9

这可以通过实现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 crunchedDatadata使用的任何值DATUMPROBE你喜欢的.

如果你不熟悉data.table,第一个参数(i)采用逻辑(类似于数据帧)按行子集.j填充了列式操作(其中每列可以通过其列名称引用)和by(或者k,如果您愿意)定义要按行分组的组.

  • _tidyverse_的成员资格似乎意味着不惜一切代价接受其解决方案. (2认同)