【发布时间】:2017-12-13 13:15:39
【问题描述】:
我目前正在研究在实验室实验期间生成的数据集,其中观察结果加倍(测量两次)。
我有观察对象的ID,结果的value,对象的type 和测量的hour(+120 其他分类、字符和数字变量,我想说)。这是一个简化的数据框:
library(dplyr)
A <- c(1,1,2,2,3,3,4)
B <- A*2.5+(rnorm(2,A[A],sd = 0.2))
C <- c("banana","banana","poireau","poireau","melon","melon","kiwi")
D <- c("H1","H2","H3","H4","H5","H6","H7")
df <-data_frame(ID=as.integer(A),value=B,type=factor(C), hour=as.character(D))
df
# A tibble: 7 x 4
ID value type hour
<int> <dbl> <fctr> <chr>
1 1 3.337352 banana H1
2 1 3.398814 banana H2
3 2 5.837352 poireau H3
4 2 5.898814 poireau H4
5 3 8.337352 melon H5
6 3 8.398814 melon H6
7 4 10.837352 kiwi H7
我的目标是按 ID 计算值的平均值,以便只保留一个值、一个 ID,但仍保留其他变量。我尝试的是:
df %>% group_by(ID) %>% summarise_if(is.double, mean)
# A tibble: 4 x 2
ID value
<int> <dbl>
1 1 3.368083
2 2 5.868083
3 3 8.368083
4 4 10.837352
如您所见,dplyr 响应我的命令:这意味着只有 double 值,但我如何保留其他列?
至于hour 字段,我希望保留表中的第一个值。所需的输出是:
# A tibble: 4 x 4
ID `mean(value)` type hour
<int> <dbl> <fctr> <chr>
1 1 3.368083 banana H1
2 2 5.868083 poireau H3
3 3 8.368083 melon H5
4 4 10.837352 kiwi H7
谢谢!
【问题讨论】: