我需要根据另一列(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
我希望为每个唯一MITTELWERT
和CHGNR
获得一个新行,其中间列为METHODE
,仅适用于 SEQ&gt; 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"
...
感谢您的任何提示!
答案 0 :(得分:2)
您可以使用dplyr
:
library(dplyr)
out <- data %>% group_by(CHGNR,METHODE) %>%
summarise(DATUM=DATUM[1],PROBE=PROBE[1],MITTELWERT=median(MITTELWERT[SEQ>1]),SEQ=">1") %>%
ungroup %>% filter(!is.na(MITTELWERT)) %>%
select(DATUM,CHGNR,SEQ,PROBE,METHODE,MITTELWERT) #%>%
我们group_by
CHGNR
和METHODE
将行分为每个CHGNR
和METHODE
的组。然后使用summarise
median
计算中位数MITTELWERT
。请注意,MITTELWERT
是SEQ>1
的子集。在summarise
中,我们还总结了DATUM
和PROBE
及其第一个元素,并将SEQ
设置为">1"
。最后,我们ungroup
使用NA
删除这些行,并对列重新排序以匹配原始data
。
要将结果作为附加行添加到data
,我们需要将SEQ
列更改为character
。然后,我们可以使用bind_rows
。
data$SEQ <- as.character(data$SEQ)
out <- bind_rows(data,out)
DATUM CHGNR SEQ PROBE METHODE MITTELWERT
1 2012-04-27 16:26:40 200028 1 1 a 2.5000000
2 2012-04-27 16:26:40 200028 1 1 a 1.6700000
3 2012-04-27 16:26:40 200028 1 1 b 0.0000000
4 2012-04-27 16:26:40 200028 1 1 b 0.0000000
5 2012-04-27 17:33:49 200029 1 1 a 0.5000000
6 2012-04-27 17:33:49 200029 1 1 a 0.3333333
7 2012-04-27 17:33:49 200029 2 2 a 0.5000000
8 2012-04-27 17:33:49 200029 2 2 a 0.0000000
9 2012-04-27 17:33:49 200029 2 2 a 0.0000000
10 2012-04-27 17:33:49 200029 2 2 b 0.0000000
11 2012-04-27 17:33:49 200029 2 2 b 0.0000000
12 2012-04-27 17:33:49 200029 2 2 b 0.0000000
13 2012-04-27 17:33:49 200029 2 2 b 5.0000000
14 2012-04-27 17:33:49 200029 2 2 a 0.0000000
15 2012-04-27 17:33:49 200029 2 2 a 0.8333333
16 2012-04-27 18:54:34 200029 3 2 a 0.0000000
17 2012-04-27 18:54:34 200029 3 2 a 0.0000000
18 2012-04-27 18:54:34 200029 3 2 a 0.0000000
19 2012-04-27 18:54:34 200029 3 2 a 0.0000000
20 2012-04-27 18:54:34 200029 3 2 b 0.0000000
21 2012-04-27 18:54:34 200029 3 3 b 0.5000000
22 2012-04-27 18:54:34 200029 3 3 b 1.0000000
23 2012-04-27 18:54:34 200029 3 3 b 0.0000000
24 2012-04-27 18:54:34 200029 3 3 b 0.0000000
25 2012-04-27 18:54:34 200029 3 3 b 0.0000000
26 2012-04-27 18:54:34 200029 3 3 a 0.5000000
27 2012-04-29 02:39:03 200057 1 1 a 0.6666667
28 2012-04-29 02:39:03 200057 2 2 a 1.0000000
29 2012-04-29 02:39:03 200057 2 2 b 0.0000000
30 2012-04-29 02:39:03 200057 2 2 b 0.0000000
31 2012-04-27 17:33:49 200029 >1 1 a 0.0000000
32 2012-04-27 17:33:49 200029 >1 2 b 0.0000000
33 2012-04-29 02:39:03 200057 >1 1 a 1.0000000
34 2012-04-29 02:39:03 200057 >1 2 b 0.0000000